Updating Class variable within a instance method

f.rodrigues picture f.rodrigues · Jan 4, 2014 · Viewed 39.9k times · Source
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

Answer

jonrsharpe picture jonrsharpe · Jan 4, 2014

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