在实例方法中更新类变量

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)


dam*_*ois 6

您需要使用@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)