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.

496<br />

Techniques avancées<br />

QUATRIÈME PARTIE<br />

On retrouve le principe strict du duck typing dans les gros frameworks comme Zope<br />

ou Twisted : des interfaces peuvent être définies pour découpler la description des<br />

caractéristiques que des objets doivent nécessairement avoir pour être utilisés dans<br />

certaines fonctions. Les caractéristiques de l’objet sont automatiquement testées par<br />

des API spécialisées.<br />

Les interfaces selon Zope 3<br />

>>> import zope.interface<br />

>>> class ILInterface(zope.interface.Interface):<br />

... """ Mon interface """<br />

... attribut = zope.interface.Attribute("""C'est l'attribut""")<br />

... def methode(parametre):<br />

... """la méthode"""<br />

...<br />

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

... zope.interface.implements(ILInterface)<br />

... def __init__(self, valeur=None):<br />

... self.attribut = valeur<br />

... def methode(self, parametre):<br />

... return parametre, self.attribut<br />

...<br />

>>> def ma_fonction(objet):<br />

... ifnot ILInterface.providedBy(ILInterface)<br />

... raise TypeError("cet objet ne couac pas")<br />

... print objet.attribut<br />

...<br />

>>> la_class = TresClasse('trop classe')<br />

>>> ma_fonction(la_class)<br />

'trop classe'<br />

Les interfaces sont comparables aux ABC, puisqu’elles permettent aussi de séparer la<br />

signature d’un comportement du code qui l’implémente dans une ou plusieurs classes.<br />

Relations entre objets<br />

Sans rentrer dans les détails sémantiques, on peut considérer qu’une classe peut<br />

former deux types de relations avec une autre classe :<br />

une relation de composition simple, où l’attribut d’une classe A est une instance<br />

d’une classe B ;<br />

une relation multiple où la classe A gère une collection, explicite ou non, d’instances<br />

de la classe B.<br />

L’objectif des relations entre classes est identique à celui entre fonctions : décomposer<br />

de manière logique le code nécessaire à l’exécution d’une tâche.

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

Saved successfully!

Ooh no, something went wrong!