11.2 Classes et instances
Objectifs d'apprentissage
À la fin de cette section, vous devriez être capable de :
- Créer une classe avec des attributs d'instance, des attributs de classe et la méthode
__init__(). - Utiliser une définition de classe pour créer des instances de classe représentant des objets.
Classes et instances
Dans la section précédente, une entité du monde réel, comme le profil d'une personne sur un réseau social, a été modélisée sous la forme d'un objet unique. Comment un programmeur pourrait-il développer un système logiciel gérant des millions de profils ? Un modèle définissant les champs et les procédures d'un profil serait alors indispensable.
Dans un programme Python, une classe (class) définit un type d'objet comportant des attributs (champs) et des méthodes (procédures). Une classe est un modèle servant à créer des objets. Les objets individuels créés à partir du type de la classe sont appelés des instances.
Concepts en pratique
Classes et instances
Considérez l'exemple ci-dessous :
class Cat:
def __init__(self):
self.name = 'Kitty'
self.breed = 'domestic short hair'
self.age = 1
def print_info(self):
print(self.name, 'is a ', self.age, 'yr old', self.breed)
pet_1 = Cat()
pet_2 = Cat()
Créer des instances avec __init__()
___init___() est une méthode spéciale appelée chaque fois qu'une nouvelle instance d'une classe est créée. self fait référence à l'instance d'une classe et est utilisé dans les méthodes de classe pour accéder à l'instance spécifique ayant appelé la méthode. __init__() utilise self pour définir et initialiser les attributs de l'instance.
Concepts en pratique
instances et __init__()
Considérez l'exemple ci-dessous :
1 | class Rectangle: |
2 | def __init__(self): |
3 | self.length = 1 |
4 | self.width = 1 |
5 | def area(self): |
6 | return self.length * self.width |
7 | |
8 | room_1 = Rectangle() |
9 | room_1.length = 10 |
10 | room_1.width = 15 |
11 | print("Room 1's area:", room_1.area()) |
12 | room_3 = Rectangle() |
13 | room_3.length = 12 |
14 | room_3.width = 14 |
15 | print("Room 3's area:", room_3.area()) |
Attributs d'instance et attributs de classe
Les attributs présentés jusqu'à présent étaient des attributs d'instance. Un attribut d'instance (instance attribute) est une variable unique à chaque instance d'une classe et on y accède en utilisant le format instance_name.attribute_name. Un autre type d'attribut, un attribut de classe (class attribute), appartient à la classe et est partagé par toutes les instances de la classe. On accède aux attributs de classe en utilisant le format class_name.attribute_name.
Concepts en pratique
Instances et attributs de classe
Considérez l'exemple ci-dessus.
À vous d'essayer
Créer une classe pour les billets d'avion d'une compagnie aérienne
Écrivez une classe, FlightTicket, comme décrit ci-dessous. Les valeurs par défaut suivent les attributs. Créez ensuite un billet d'avion et attribuez à chaque attribut d'instance les valeurs lues depuis l'entrée.
Attributs d'instance :
- flight_num: 1
- airport: JFK
- gate: T1-1
- time: 8:00
- seat: 1A
- passenger: unknown
Attributs de classe :
- airline: Oceanic Airlines
- airline_code: OA
Méthode :
__init__(): initialise les attributs d'instanceprint_info(): affiche les informations du billet (fourni dans le modèle)
Entrée donnée :
2121
KEF
D22B
11:45
12B
Jules Laurent
La sortie est :
Passenger Jules Laurent departs on flight # 2121 at 11:45 from KEF D22B in seat 12B
À vous d'essayer
Créer une classe pour des livres de fantasy
Écrivez une classe, Book, comme décrit ci-dessous. Créez ensuite deux instances et attribuez à chaque attribut d'instance les valeurs lues depuis l'entrée.
Attributs d'instance :
- title: ''
- author: ''
- year: 0
- pages: 0
Attribut de classe :
- imprint: Fantasy Tomes
Méthode :
__init__(): initialise les attributs d'instanceprint_info(): affiche les informations du livre (fourni dans le modèle)
Entrée donnée :
Lord of the Bracelets
Blake R. R. Brown
1999
423
A Match of Thrones
Terry R. R. Thomas
2020
761
La sortie est :
Lord of the Bracelets by Blake R. R. Brown published by Fantasy Tomes
in 1999 with 423 pages
A Match of Thrones by Terry R. R. Thomas published by Fantasy Tomes
in 2020 with 761 pages