Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Updating Class variable within a instance method

Tags:

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

like image 428
f.rodrigues Avatar asked Jan 04 '14 16:01

f.rodrigues


2 Answers

You are confusing classes and instances.

class MyClass(object):     pass  a = MyClass() 

MyClass is 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 
like image 175
jonrsharpe Avatar answered Nov 10 '22 06:11

jonrsharpe


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 
like image 29
damienfrancois Avatar answered Nov 10 '22 04:11

damienfrancois