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