Python __setitem__类变量

时间:2014-09-11 19:51:19

标签: python variables object

我正在尝试创建一个包含一些变量的类。

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变量。

3 个答案:

答案 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)
     

那应该完成任务。