2014-01-04 3 views
5
class MyClass: 
    var1 = 1 

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

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

a = MyClass(1) 

Я пытаюсь обновить переменный класс (переменная1) в методе (_ INIT _), но я даю мне:Обновления переменного класса в пределах метода экземпляра

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

Я делаю это, потому что я хочу получить легкий доступ ко всем переменным в классе, позвонив по ссылке MyClass.var1

ответ

8

Вы вводите в заблуждение классы и экземпляры.

class MyClass(object): 
    pass 

a = MyClass() 

MyClass является классом, a является экземпляром этого класса. Ваша ошибка здесь в том, что update является методом экземпляра . Для того, чтобы вызвать его из __init__ можно использовать:

self.update(value) 

или

MyClass.update(self, value) 

В качестве альтернативы, сделать update метод а класс:

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

О, я вижу, я думал, что методы класса - это те, у кого нет собственных аргументов. Спасибо за разъяснение. –

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 
Смежные вопросы