f.r*_*ues 12 python methods class instance
class MyClass:
var1 = 1
def update(value):
MyClass.var1 += value
def __init__(self,value):
self.value = value
MyClass.update(value)
a = MyClass(1)
Run Code Online (Sandbox Code Playgroud)
我正在尝试更新方法(_ init _)中的类变量(var1),但我给了我:
TypeError: unbound method update() must be called with MyClass instance as first argument (got int instance instead)
Run Code Online (Sandbox Code Playgroud)
我这样做是因为我希望通过调用print MyClass.var1轻松访问类中的所有变量
jon*_*rpe 17
你混淆了类和实例.
class MyClass(object):
pass
a = MyClass()
Run Code Online (Sandbox Code Playgroud)
MyClass
是一个类,a
是该类的一个实例.在这里你的错误是update
是一个实例方法.要调用它__init__
,请使用以下任一方法:
self.update(value)
Run Code Online (Sandbox Code Playgroud)
要么
MyClass.update(self, value)
Run Code Online (Sandbox Code Playgroud)
或者,创建update
一个类方法:
@classmethod
def update(cls, value):
cls.var1 += value
Run Code Online (Sandbox Code Playgroud)
您需要使用@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
Run Code Online (Sandbox Code Playgroud)