Chapitre 13

Chapitre 13

13.1 Notions de base de l'héritage

1.
a. Un beignet est un type de pâtisserie, donc Doughnut hérite de Pastry.
2.
b. Une cuisine possède un congélateur, donc une classe Kitchen contiendrait une instance de Freezer. Une relation « possède-un » est également appelée composition.
3.
b. La classe Goalkeeper hérite de la classe Player.
4.
b. Le nom de la sous-classe est suivi du nom de la superclasse entre parenthèses.
5.
a. Dériver CarryOn de Luggage est spécifié dans la définition de classe de CarryOn'. Ex. : class CarryOn(Luggage): . Les instances d'une sous-classe, comme CarryOn, sont créées comme d'autres classes et ne requièrent pas le nom de la classe de base.
6.
c. Une instance de SubClass a accès à func_1(), héritée de SuperClass, ainsi qu'à func_2(), une méthode de SubClass.
7.
a. Une instance de SuperClass a accès à la méthode de SuperClass' func_1(), mais n'a accès à rien dans SubClass, y compris func_2().

13.2 Accès aux attributs

1.
b. dev_1 est le deuxième Employee créé. Ainsi, dev_1 est le deuxième objet à appeler Employee.__init__(), et dev_1.e_id reçoit la valeur 2 .
2.
a. La méthode de SubClass' __init__() n'est pas explicitement définie, donc celle de SuperClass', __init__(), est exécutée.
3.
b. dc_1 hérite de feat_1 et feat_2 de SuperClass.
4.
b. dev_display() est une méthode de Developer qui accède, pour dev_1', à l'attribut d'instance lang_xp.
5.
c. dev_display() est une méthode de Developer. emp_1 n'est pas une instance de Developer, donc emp_1 ne peut pas accéder à dev_display().
6.
a. Les attributs d'instance hérités d'Employee, la superclasse, sont accessibles de la même manière que les attributs d'instance de la sous-classe Developer'.

13.3 Méthodes

1.
b. La redéfinition consiste à définir une méthode de sous-classe qui porte le même nom que la méthode de la superclasse.
2.
b. Le paramètre self est manquant dans la définition de la méthode redéfinie.
3.
c. La définition de la classe n'indique pas d'héritage. La définition devrait être class ContractTax(Tax):.
4.
b. La superclasse de Square est Rectangle. La méthode de Rectangle __init__() est appelée à la ligne 6.
5.
a. super().__init__(4) appelle la méthode __init__() de la superclasse de Rectangle', Polygon. L'exécution passe à la ligne 3, et num_sides est initialisé avec 4.
6.
b. L'attribut d'instance side est initialisé avec 5.
7.
b. La méthode de Rectangle' __init__() appelle toujours celle de Polygon', __init__(), avec num_sides=4.
8.
c. Le polymorphisme permet à print_type() d'être redéfinie dans les sous-classes de Polygon.
9.
a. L'opérateur * peut être utilisé avec des opérandes entiers ainsi qu'avec des chaînes de caractères et d'autres types.

13.4 Héritage hiérarchique

1.
a. Class A est la superclasse de Class B et Class C.
2.
b. Employee serait une superclasse appropriée pour Developer et SalesRep. Developer et SalesRep ne sont pas directement liés.
3.
a. B(2) se résout en B(2, 0), car b_attr a une valeur par défaut de 0 . a_attr reçoit la valeur 2 .
4.
b. c_inst a accès à l'attribut d'instance de C', c_attr, ainsi qu'à l'attribut hérité de A, a_attr.
5.
b. D hérite de B, donc d_inst hérite de b_attr. B hérite également de A, donc d_inst hérite de d_attr.

13.5 Héritage multiple et classes mixin

1.
a. 1 est l'argument transmis à la méthode de C' __init__() pour a_attr.
2.
b. Aucun argument n'est transmis à la méthode de C' __init__() pour c_attr, donc c_attr reçoit la valeur par défaut, 20 .
3.
a. 2 correspond à b_attr dans la méthode de B' __init__().
4.
a. eat() ne s'applique qu'aux plantes carnivores, représentées par Pitcher et VenusFlyTrap.
5.
b. eat() peut être déplacée dans une classe mixin incluse dans la liste d'héritage de Pitcher' et de VenusFlyTrap'.
6.
b. Une bonne pratique consiste à terminer le nom d'une classe mixin par "Mixin" afin d'identifier le rôle de la classe. L'implémentation finale est :
class Plant:
  def photosynth(self):
    print("Photosynthesizing")

class CarnivMixin:
  def eat(self):
    print("Eating")

class Rose(Plant):
  pass

class Pitcher(Plant, CarnivMixin):
  pass

class VenusFlyTrap(Plant, CarnivMixin)
  pass