17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Structuration du code<br />

CHAPITRE 5<br />

>>> class TVDVDCombo(Television, DVDPlayer):<br />

... pass<br />

...<br />

>>> dir(TVDVDCombo)<br />

['__doc__', '__module__', 'brand', 'play_dvd', 'print_brand']<br />

La mécanique de recherche des attributs est appliquée à chacune des classes de base,<br />

de gauche à droite. Dans notre cas, lorsqu’un attribut est demandé à l’instance de<br />

classe TVDVDCombo, l’interpréteur parcourt l’arbre de dérivation de la classe<br />

Television comme dans le cas d’un héritage simple, puis passe à la classe DVDPlayer<br />

si l’attribut n’a pas été trouvé.<br />

Lorsque des classes parentes ont une classe de base commune, il devient difficile de<br />

maîtriser les enchaînements d’appels et d’avoir une bonne visibilité. L’utilisation de<br />

l’héritage multiple est donc délicate et fortement déconseillée dans la plupart des cas.<br />

Son utilisation peut parfois être imposée lorsqu’un framework un peu rigide est utilisé.<br />

Surcharge des attributs<br />

Toutes les méthodes et attributs de données peuvent être surchargés, en utilisant la<br />

même signature.<br />

Surcharge<br />

>>> class Car:<br />

... type = 'Voiture'<br />

... def print_type(self):<br />

... print(self.type)<br />

... def use_type(self):<br />

... self.print_type()<br />

...<br />

>>> class Mehari(Car):<br />

... def use_type(self):<br />

... print('Mehari et %s' % self.type)<br />

...<br />

>>> my_car = Mehari()<br />

>>> my_car.print_type()<br />

Voiture<br />

>>> my_car.use_type()<br />

Mehari et Voiture<br />

L’interpréteur utilise alors la première méthode qu’il trouve en suivant la règle de<br />

recherche précédemment énoncée. Le mécanisme introduit par le mapping de nom,<br />

qui fournit aux méthodes l’instance par le biais du paramètre self, permet au code<br />

des méthodes de manipuler d’autres attributs.<br />

115

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!