class MyClass:
var1 = 1
def update(value):
MyClass.var1 += value
def __init__(self,value):
self.value = value
MyClass.update(value)
a = MyClass(1)
J'essaie de mettre à jour une variable de classe (var1) dans une méthode (_ init _ =) mais je me donne:
TypeError: unbound method update() must be called with MyClass instance as first argument (got int instance instead)
Je fais cela parce que je veux un accès facile à toutes les variables d'une classe en appelant print MyClass.var1
Vous confondez classes et instances.
class MyClass(object):
pass
a = MyClass()
MyClass
est une classe, a
est une instance de cette classe. Votre erreur ici est que update
est un méthode d'instance. Pour l'appeler depuis __init__
, utilisez soit:
self.update(value)
ou
MyClass.update(self, value)
Sinon, faites update
a méthode de classe:
@classmethod
def update(cls, value):
cls.var1 += value
Vous devez utiliser le @classmethod
décorateur:
$ 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