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轻松访问类中的所有变量
答案 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