Python __setitem__ 类变量
我正在尝试创建一个包含一些变量的类。
def __setitem__(self, item, value):
switch = {
"hour" : self.hour,
"minute" : self.minute,
"second" : self.second,
"day" : self.day,
"dennidoby" : self.dennidoby,
"season" : self.season,
"month" : self.month,
"year" : self.year,
"dayr" : self.dayr,
"dennitepl" : self.dennitepl,
"pocasitepl" : self.pocasitepl,
"wheather" : self.wheather,
"temperature" : self.temperature,
"obdobi" : self.obdobi,
"den" : self.den,
"mesic" : self.mesic
}
switch[item] = value
我用以下代码来调用:
cas["wheather"] = "storm"
但是:
switch[item] = value
在对象中设置变量时不起作用。
3 个回答
2
每次你调用 __setitem__
的时候,其实是在创建一个新的字典,叫做 switch
。然后你用 switch[item] = value
来更新这个字典。看起来 switch
和实例 self
没有任何关系。如果你想让你的类的实例拥有这些键值对,并且还想用 __setitem__
来更新的话,我建议你可以这样做:
class Cas(object):
def __init__(self):
self._switch = { ... #what you had...}
def __setitem__(self, item, value):
self._switch[item] = value
def __getitem__(self, item):
return self._switch[item]
不过,从你分享的信息来看,直接使用一个 dict
或者创建一个 dict
的子类可能更合适。
2
你可以通过 setattr(item, value) 动态地改变一个属性的值。这样你的代码看起来会像这样:
def __setitem__(self, item, value): self.__setattr__(item, value)
这样就可以完成这个任务了。
3
其实不是这样的。switch
是一个局部变量:当__setitem__
这个方法执行完毕后,它就会被删除,下次你调用这个方法时,它会用你写死的值重新创建。
你应该把这个变量的初始值设置放到__init__
方法里,并在__init__
和__setitem__
中都用self.switch
来引用它。