在实例方法中更新类变量

时间:2014-01-04 16:18:04

标签: python class methods instance

class MyClass:
    var1 = 1

    def update(value):
        MyClass.var1 += value

    def __init__(self,value):
        self.value = value
        MyClass.update(value)

a = MyClass(1)

我正在尝试更新方法中的类变量( var1 )( _ init _ ),但我给了我:< / p>

TypeError: unbound method update() must be called with MyClass instance as first argument (got int instance instead)

我这样做是因为我希望通过调用print MyClass.var1轻松访问类中的所有变量

2 个答案:

答案 0 :(得分:14)

您会混淆实例

class MyClass(object):
    pass

a = MyClass()

MyClass是一个类,a是该类的一个实例。您的错误是update实例方法。要从__init__拨打电话,请使用:

self.update(value)

MyClass.update(self, value)

或者,将update作为类方法

@classmethod
def update(cls, value):
    cls.var1 += value

答案 1 :(得分:3)

您需要使用@classmethod装饰器:

$ cat t.py 
class MyClass:
    var1 = 1

    @classmethod
    def update(cls, value):
        cls.var1 += value

    def __init__(self,value):
        self.value = value
        self.update(value)

a = MyClass(1)
print MyClass.var1
$ python t.py 
2