Classes et instances

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.

Faites le point

Représenter une commande de café avec une classe

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()
1.
Quel est le nom de la classe ?
  1. Cat
  2. class Cat
  3. self
2.
Laquelle des propositions suivantes est une instance de la classe Cat ?
  1. __init__
  2. name
  3. pet_1
3.
Laquelle des propositions suivantes est un attribut ?
  1. breed
  2. pet_2
  3. print_info
4.
Supposons que le programmeur veuille modifier la classe pour représenter un chat de compagnie. Quel est le nom approprié qui respecte les recommandations de la PEP 8 ?
  1. petcat
  2. pet_cat
  3. PetCat

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.

Faites le point

Créer plusieurs commandes de café et modifier des attributs

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())
5.
Combien de fois __init__() est-elle appelée ?
  1. 1
  2. 2
  3. 3
6.
Lorsque la ligne 11 s'exécute, le flux d'exécution passe à la ligne 5. Que représente self à la ligne 5 ?
  1. l'aire de room_1
  2. l'instance room_1
  3. la classe Rectangle
7.
Quelle ligne initialise l'attribut d'instance length ?
  1. 3
  2. 6
  3. 9
8.
Supposons que la ligne 2 soit remplacée par def __init__():. À quelles valeurs les attributs de room_1's seraient-ils initialisés ?
  1. length = 0, width = 0
  2. length = 1, width = 1
  3. Error

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.

Faites le point

Utiliser des attributs de classe pour partager les informations des commandes de café

Concepts en pratique

Instances et attributs de classe

Considérez l'exemple ci-dessus.

9.
Lequel est un attribut d'instance ?
  1. loc
  2. order_id
  3. order_3
10.
Supposons que la ligne order_1.cup_size = 8 soit ajoutée avant order_3.print_order(). Quelle est la nouvelle sortie ?
  1. Cafe Coffee Order 3 : 8 oz
  2. Cafe Coffee Order 3 : 16 oz
  3. Error
11.
Supposons que la ligne CoffeeOrder.loc = 'Caffeine Cafe' soit ajoutée avant order_3.print_order(). Quelle est la nouvelle sortie ?
  1. Caffeine Cafe Order 3 : 16 oz
  2. Cafe Coffee Order 3 : 16 oz
  3. Error
12.
Supposons que la ligne self.cls_id = 5 soit ajoutée à la fin de la définition de __init__(). Quelle est la nouvelle sortie ?
  1. Cafe Coffee Order 5 : 16 oz
  2. Cafe Coffee Order 3 : 16 oz
  3. Error

À 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'instance
  • print_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'instance
  • print_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