Attribut de classe
class Dog:
leg_number = 4
def __init__(self,name):
self.name = name
chien1 = Dog("Médor")
print(chien1.leg_number) # 4
print(Dog.leg_number) # 4
Dans l’exemple ci-dessus leg_number est un attribut de classe. Pyton va chercher d’abord dans les attribut d’instance pour voir si leg_number existe, sinon va aller chercher dans les attributs de classe.
Attribut d’instance
name est un attribut d’instance car rattaché à self.
class Dog:
leg_number = 4
def __init__(self,name):
self.name = name
chien1 = Dog("Médor")
print(chien1.name) # Médor
print(Dog.name) # AttributeError: type object 'Dog' has no attribute 'name'
Python ne trouvera pas name en attribut de classe. Par contre on peut surcharger name en attribut de classe.
class Dog:
leg_number = 4
name = "toto"
def __init__(self,name):
self.name = name
chien1 = Dog('médor')
print(chien1.name) # médor
print(Dog.name) # toto
Un attribut de classe est commun à tous les objets qui en dérivent.
class Dog:
leg_number = 4
def __init__(self,name):
self.name = name
chien1 = Dog('médor')
chien2 = Dog('Lassie')
print(chien1.leg_number)
print(chien2.leg_number)
Dog.leg_number = 5
print(chien1.leg_number)
print(chien2.leg_number)
https://www.toptal.com/python/python-class-attributes-an-overly-thorough-guide