Updating Class variable within a instance method

2019-06-16 20:10发布

class MyClass:
    var1 = 1

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

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

a = MyClass(1)

I'm trying to update a class variable(var1) within a method(_init_) but I gives me:

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

I'm doing this because I want easy access to all variables in a class by calling print MyClass.var1

2条回答
啃猪蹄的小仙女
2楼-- · 2019-06-16 21:01

You need to use the @classmethod decorator:

$ 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
查看更多
姐就是有狂的资本
3楼-- · 2019-06-16 21:04

You are confusing classes and instances.

class MyClass(object):
    pass

a = MyClass()

MyClassis a class, a is an instance of that class. Your error here is that update is an instance method. To call it from __init__, use either:

self.update(value)

or

MyClass.update(self, value)

Alternatively, make update a class method:

@classmethod
def update(cls, value):
    cls.var1 += value
查看更多
登录 后发表回答