Classes¶
Voici une classe :
class Dog:
species = "canis lupus" # species is a class variable
def __init__(self, name): # __init__ is the constructor
self.name = name # self.name is an object variable
def sound(self): # sound is a method (a method is a function of an object)
return "Woof, I am " + self.name
Les classes sont des entités utilisées pour regrouper des données et des fonctions décrivant un concept. Elles permettent d’organiser des projets dans des entités plus petites que le projet lui-même, ce qui offre les avantages suivants:
- Les classes sont des concepts qui aident les humains à comprendre ce qu’ils font
- Elles encapsulent des données et permettent de les masquer
- Le débogage est plus simple car vous pouvez déboguer classe par classe
- Les classes sont sûres, car plus faciles à déboguer et à tester qu'un programme complet (et utiliser des composants sûrs conduit à des programmes sûrs)
- Les classes peuvent être réutilisées dans d'autres projets
Cela vaut la peine de prendre le temps de réfléchir à ce qu'est une classe
- Qu'est-ce qu'un chien ?
- Que dois-je pouvoir faire avec cette classe ?
- Est-elle assez générique pour être réutilisé dans un autre projet ?
- Est-ce que quelqu'un d'autre peut la comprendre et l'étendre ?
Une classe est un moule pour fabriquer des objets.
max = Dog('Max') # max est un objet de la classe Dog
Vocabulaire¶
Pour pouvoir parler de classes et d'objets, définissons le vocabulaire introduit en commentaire dans la classe Dog.
L'astuce principale est que self
se réfère à l'objet. Il n’est pas obligatoire d’utiliser le mot «self», mais c’est une convention que je conseille vivement de respecter. L'objet est le premier argument des méthodes.
Si quelque chose implique self
, alors il est lié à l'objet et peut être :
- une variables d'instance (également appelée variable d'objet)
- une méthodes qui sont des fonctions d'une classe
S'il n'est pas lié à self
, alors il est lié à la classe elle-même et peut être :
- une variables de classe
- une méthodes statiques (statiques car identiques pour tous les objets)
Toutes ces choses sont des attributs de la classe et des objets. Python dit que tout ce qui est après un point .
est un attribut.
Pour résumer:
type | nom de variable | nom de fonction |
---|---|---|
objet | variable d'instance | méthode |
classe | variable de classe | méthode statique |
Objets¶
Pour créer un objet, vous devez simplement appeler le nom de la classe avec un argument si les méthodes d'initialisation en ont besoin.
Un objet peut utiliser les données et les fonctions de la classe :
max = Dog('Maximus')
print('%s says "%s"' % (max.name, max.sound())) # Object attributes are called with a dot
print("He is a", max.species) # between the object name and its attribute
print("BTW all dogs are", Dog.species) # Same for class attributes
Maximus says "Woof, I am Maximus" He is a canis lupus BTW all dogs are canis lupus
Méthode statique¶
Une méthode statique peut être faite de deux manières :
- en la définissant dans la classe sans arguments
- en décorant une fonction par
@staticmethod
(meilleur moyen, plus facile de voir que c'est une fonction statique)
class Dog:
_classification = ['Animalia',
'Chordata',
'Synapsida',
'Mammalia',
'Carnivora',
'Caniformia',
'Canidae',
'Canis',
'Canis lupus',
'Canis lupus familiaris']
@staticmethod
def classification(level): # no reference to self, the object
return Dog._classification[-level:]
Dog.classification(3)
['Canis', 'Canis lupus', 'Canis lupus familiaris']
Les méthodes statiques peuvent également être appelées à partir d'objets:
max = Dog()
max.classification(5)
['Caniformia', 'Canidae', 'Canis', 'Canis lupus', 'Canis lupus familiaris']
{{ PreviousNext("../lesson2 Deeper in Python/12 xml.ipynb", "02 Inheritance.ipynb")}}