在实例方法中更新类变量

2024-04-25 23:12:16 发布

您现在位置:Python中文网/ 问答频道 /正文

class MyClass:
    var1 = 1

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

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

a = MyClass(1)

我试图在方法(init/strong>中更新类变量(var1),但我给出了:

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

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


Tags: 方法instanceselfinitvaluedefmyclassupdate
2条回答

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

您混淆了实例

class MyClass(object):
    pass

a = MyClass()

MyClass是一个类,a是该类的实例。这里的错误是update是一个实例方法。要从__init__调用它,请使用:

self.update(value)

或者

MyClass.update(self, value)

或者,使updatea类方法

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

相关问题 更多 >

    热门问题