我正在尝试创建一个包含一些变量的类。
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
不适用于对象中的set变量。
答案 0 :(得分:3)
嗯,不。 switch
是一个局部变量:一旦__setitem__
方法退出,它将被删除,并在下次调用方法时使用您的硬编码值重新创建。
您应该将变量的初始种群移至__init__
,并在self.switch
和__setitem__
中将其称为{{1}}。
答案 1 :(得分: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 :(得分:1)
您可以使用 setattr (项目,值)动态更改属性的值。所以你的代码看起来像:
def __setitem__(self, item, value): self.__setattr__(item, value)
那应该完成任务。