17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

490<br />

Techniques avancées<br />

QUATRIÈME PARTIE<br />

... @classmethod<br />

... def __subclasshook__(cls, C):<br />

... if cls is Base:<br />

... if any("sous_calcul" in sub.__dict__<br />

... for sub in C.__mro__):<br />

... return True<br />

... return NotImplemented<br />

...<br />

>>> class A(object):<br />

... def __init__(self, sous_objet):<br />

... if not isinstance(sous_objet, Base):<br />

... raise TypeError("A ne travaille qu'avec Base ou dérivés")<br />

... self.sous_objet = sous_objet<br />

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

... return 1 + self.sous_objet.sous_calcul()<br />

...<br />

>>> class B(object):<br />

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

... return 1<br />

...<br />

>>> class C(object):<br />

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

... return 2<br />

...<br />

>>> class D(object):<br />

... pass<br />

...<br />

>>> print(A(B()).calcul())<br />

2<br />

>>> print(A(C()).calcul())<br />

3<br />

>>> print(A(D()).calcul())<br />

Traceback (most recent call last):<br />

File "", line 1, in <br />

File "", line 4, in __init__<br />

TypeError: A ne travaille qu'avec Base ou dérivés<br />

Encapsulation<br />

Quel que soit le typage utilisé, l’objectif des classes reste de séparer l’interface de<br />

l’implémentation. L’interface est représentée par l’ensemble des méthodes et données<br />

que les utilisateurs de la classe connaissent, et l’implémentation est représentée par<br />

toute la mécanique interne. Cette encapsulation permet de rendre les utilisateurs de<br />

la classe indépendants de la représentation interne.

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

Saved successfully!

Ooh no, something went wrong!