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_ =)しかし、私は私にくれます:
TypeError: unbound method update() must be called with MyClass instance as first argument (got int instance instead)
これは、print MyClass.var1を呼び出してクラス内のすべての変数に簡単にアクセスできるようにするためです。
classesとinstancesを混同しています。
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
@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