Accès aux attributs

13.2 Accès aux attributs

Objectifs d'apprentissage

À la fin de cette section, vous devriez être en mesure de :

  • Implémenter une sous-classe qui accède aux attributs hérités de la superclasse.
  • Écrire le __init__() d'une sous-classe qui hérite des attributs d'instance de la superclasse et crée de nouveaux attributs d'instance.

Création d'une sous-classe simple

Les sous-classes ont accès aux attributs hérités de la superclasse. Lorsque le __init__() de la sous-classe n'est pas explicitement défini, la méthode __init__() de la superclasse est appelée. L'accès aux deux types d'attributs utilise la même syntaxe.

Faites le point

Définir une sous-classe simple

Concepts en pratique

Utiliser des sous-classes simples

1.
Considérez l'exemple Employee et Developer ci-dessus. Quelle est la valeur de dev_1.e_id ?
  1. 1
  2. 2
  3. Error
2.
Considérez l'exemple suivant. La ligne 13 s'exécute et SubClass() est appelé. Vers quelle ligne le flux de contrôle se déplace-t-il ?
1
class SuperClass:
2
  def __init__(self):
3
    self.feat_1 = 1
4
    self.feat_2 = ""
5
6
  def bc_display(self):
7
    print(f"Superclass: {self.feat_2}")
8
9
class SubClass(SuperClass):
10
  def dc_display(self):
11
    print(f"Subclass: {self.feat_2}")
12
13
dc_1 = SubClass()
  1. 2
  2. 10
  3. Error
3.
Considérez l'exemple suivant. Quel(s) attribut(s) d'instance possède dc_1 ?
class SuperClass:
  def __init__(self):
    self.feat_1 = 1
    self.feat_2 = ""

  def bc_display(self):
    print(f"Superclass: {self.feat_2}")

class SubClass(SuperClass):
  def dc_display(self):
    print(f"Subclass: {self.feat_2}")

dc_1 = SubClass()
  1. feat_2
  2. feat_1 et feat_2
  3. Aucun

Utiliser __init__() pour créer et hériter des attributs d'instance

Un programmeur souhaite souvent qu'une sous-classe possède de nouveaux attributs d'instance ainsi que ceux hérités de la superclasse. Définir explicitement __init__() dans une sous-classe consiste à initialiser ses nouveaux attributs d'instance ainsi que ceux hérités de la superclasse.

Faites le point

Définir __init__() dans une sous-classe

Concepts en pratique

Accéder aux attributs d'une sous-classe

Considérez l'exemple de code Employee et Developer :

    class Employee:
      count = 0
      def __init__(self):
        Employee.count += 1
        self.e_id = Employee.count
        self.hire_year = 2023

      def emp_display(self):
        print(f"Employee {self.e_id} hired in {self.hire_year}")

    class Developer(Employee):
      def __init__(self):
        Employee.count += 1
        self.e_id = Employee.count
        self.hire_year = 2023
        self.lang_xp = ["Python", "C++", "Java"]

      def dev_display(self):
        print(f"Proficient in {self.lang_xp}")
    
    emp_1 = Employee()
    dev_1 = Developer()
4.
Quelle serait la sortie de dev_1.dev_display() ?
  1. Employee 2 hired in 2023
  2. Proficient in ['Python', 'C++', 'Java']
  3. Error
5.
Quelle serait la sortie de emp_1.dev_display() ?
  1. Employee 1 hired in 2023
  2. Proficient in ['Python', 'C++', 'Java']
  3. Error
6.
Supposons que dev_display() doive être modifié pour afficher l'identifiant du développeur ainsi que ses compétences. Par ex. : dev_1.dev_display() afficherait Employee 2 proficient in ['Python', 'C++', 'Java']. Quel est le nouvel appel new print() approprié dans dev_display() ?
  1. print(f"Employee {self.e_id} proficient in {self.lang_xp}")
  2. print(f"Employee {self.Employee.e_id} proficient in {self.lang_xp}")
  3. print(f"Employee 2 proficient in {self.lang_xp}")

À vous d'essayer

Créer une sous-classe avec un attribut d'instance

Étant donné une classe Dessert, créez une classe Cupcake, héritée de Dessert. Méthodes de la classe Cupcake :

  • __init__(self) : initialise l'attribut d'instance hérité ingredients avec ["butter", "sugar", "eggs", "flour"], et initialise l'attribut d'instance frosting avec "buttercream"
  • display(self) : affiche les ingrédients et le glaçage d'un cupcake

Appelez ensuite la méthode display() sur un nouvel objet Cupcake. La sortie doit correspondre à :

    Made with ["butter", "sugar", "eggs", "flour"] and topped with buttercream frosting