python 新人求助 类属性 外部修改值 求助

陌小佳 2021-04-29 10:42:06

class MainEnum(Enum):
num = 1
abc = 2
pass
class Maindata:
num:int
def __init__(self):
self.num = 1000
self.abc = 1000
pass

def one(self,py:MainEnum):
print(py)
print(self.num)
pass

pass

main= Maindata()
main.one(MainEnum.num.name)


输出

num
1000



代码在上 刚学python一个月 因为是做接口给人调用 想做mainEnum枚举值让他不会写错属性
在调用类Maindata的one的时候传入我定义好的属性字符串
想让self.py => 变成self.num 然后修改对应的属性值
但代码报错 我知道python有一种方式为getattr() 和 setattr() 可以解决这个问题 但是属性一多的话会增加开销
还是希望用self. 的方式去解决 求各位大神给出解决的方法
...全文
234 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
陌小佳 2021-05-07
谢谢大佬
  • 打赏
  • 举报
回复
chuifengde 2021-05-04
这要看具体应用场景,单纯就上面的统一计算规则,可以用下面的:
self.__dict__[py] = self.__dict__[py] + 200
  • 打赏
  • 举报
回复
陌小佳 2021-05-03
可以的 之前也考虑过这个 但是属性答100个就要写100个if 代码维护不方便
  • 打赏
  • 举报
回复
chuifengde 2021-05-03
这种情况,作个判断不行吗? if py =='num': self.num +=100 else: self.abc +=200
  • 打赏
  • 举报
回复
陌小佳 2021-05-02
你好 很高兴能获得你的回答 可能你理解错我的意思 我的意思是比如one方法的py参数值为num字符串时 self.py就变成self.num使用 然后对self.num做一系列操作 同理py参数值为abc时 self.py也会变成self.abc使用 然后对self.abc做一系列操作 下面附上我想要实现的代码 请大神指点一下

from enum import Enum

#该枚举供外部对接调用 防止输错属性名
class MainEnum(Enum):
    num = 1
    abc = 2
    pass

class Maindata:
    num: int
    abc: int
    def __init__(self):
        self.num = 1000
        self.abc = 2000
        pass

    def one(self, py: MainEnum):
        print('传入的参数为'+py)
        print('修改前的self.num为:',self.num)
        #print(self.py) 我想让self.py变成self.num
        setattr(self,py,getattr(self,py)+100) #这是可以实现的方法 但是不想用这种方式实现数据太多开销太大
        print('修改后的self.num为:',self.num)
        pass

    pass

pass
main = Maindata()
main.one(MainEnum.num.name)
这是上诉代码的输出结果

传入的参数为num
修改前的self.num为: 1000
修改后的self.num为: 1100
  • 打赏
  • 举报
回复
weixin_45903952 2021-04-30
写类的时候可以默认参数或传递参数maindata(num=100)? 或py=mainenum.num,在mainenum中__init__定义mainenum.num? 类的传递我有时也搞得很糊涂,
  • 打赏
  • 举报
回复
chuifengde 2021-04-30
用命名元组,如:
class MainEnum():
    from collections import namedtuple    
    _E = namedtuple('Enum', 'num abc')
    Enum = _E(1, 2)
   
class Maindata:
    num:int
    def __init__(self):
        self.num = 1000
        self.abc = 1000
        pass
      
    def one(self,py:MainEnum):
        print(py)
        print(self.num)
        pass
      
    pass
  
main= Maindata()
main.one(MainEnum.Enum.abc)
  • 打赏
  • 举报
回复
相关推荐
发帖
脚本语言

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • ITBOB • 鲍勃
加入社区
帖子事件
创建了帖子
2021-04-29 10:42