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.

516<br />

Techniques avancées<br />

QUATRIÈME PARTIE<br />

test (unicode)<br />

test<br />

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

File "chain_of_responsibility.py", line 79, in ?<br />

print(calculator(object()))<br />

File "chain_of_responsibility.py", line 46, in __call__<br />

return self._first_handler(*args, **kw)<br />

File "chain_of_responsibility.py", line 32, in __call__<br />

return self._next_handler(*args, **kw)<br />

File "chain_of_responsibility.py", line 32, in __call__<br />

return self._next_handler(*args, **kw)<br />

File "chain_of_responsibility.py", line 34, in __call__<br />

raise NotImplementedError<br />

NotImplementedError<br />

Une variante de ce DP consiste à parcourir entièrement la chaîne. Cette nuance est<br />

relativement commune dans les logiciels de traitement du signal : les filtres qui transforment<br />

les données peuvent être chaînés pour être appliqués les uns après les autres.<br />

State<br />

Le DP State stipule qu’un objet déjà instancié peut changer à tout moment de classe,<br />

et donc de comportement. Cette propriété permet l’implémentation d’automates à<br />

état fini (Finite State Machine).<br />

Cette manipulation est impossible pour la plupart des langages de programmation<br />

objet qui définissent une bonne fois pour toutes le type d’une instance. Python est<br />

l’un des rares langages à le permettre car il est construit sur le principe de la<br />

délégation : un objet donné exécute le code défini dans une classe et peut à tout<br />

moment exécuter le code d’une autre classe. Appeler instance.x() pour un objet de<br />

classe X est donc équivalent à l’appel de X.x(instance).<br />

Changement de classe d’une instance<br />

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

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

... print('%s est passé par A' % str(self))<br />

...<br />

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

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

... print('%s est passé par B' % str(self))<br />

...<br />

>>> objet = A()<br />

>>> objet.a()<br />

est passé par A<br />

>>> B.b(objet)<br />

Traceback (most recent call last):

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

Saved successfully!

Ooh no, something went wrong!