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.

__unicode__()<br />

Structuration du code<br />

CHAPITRE 5<br />

Appelée par la primitive unicode(). Doit renvoyer un objet de type unicode. Si la<br />

méthode n’est pas implémentée, une conversion en string est tentée, puis un passage<br />

de string à unicode.<br />

Utilisation de l’objet comme fonction<br />

Lorsqu’une instance d’objet est appelée comme une fonction, c’est __call__() qui<br />

est appelée si elle est définie. Les objets de cette classe deviennent, au même titre<br />

qu’une fonction ou une méthode, des objets callable.<br />

Class callable<br />

>>> class A:<br />

... def __call__(self, one, two):<br />

... return one + two<br />

...<br />

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

>>> callable(a)<br />

True<br />

>>> a(1, 6)<br />

7<br />

Accès aux attributs de l’objet<br />

Lorsque l’interpréteur rencontre une écriture de type objet.attribut, il utilise le<br />

dictionnaire interne __dict__ pour rechercher cet attribut, et remonte dans les dictionnaires<br />

des classes dérivées si nécessaire.<br />

L’utilisation des trois méthodes suivantes permet d’influer sur ce fonctionnement.<br />

__setattr__()<br />

__setattr__() est utilisée lorsqu’une valeur est assignée, en lieu et place d’une modification<br />

classique de l’attribut __dict__ de l’objet.<br />

objet.attribut = 'valeur' devient équivalent à objet.__setattr__('attribut',<br />

'valeur')<br />

Le code contenu dans __setattr__() ne doit pas appeler directement l’attribut à<br />

mettre à jour, au risque de s’appeler lui-même récursivement. Il faut utiliser un accès<br />

à __dict__.<br />

__getattr__() et __getattribute__()<br />

__getattr__() est appelée en dernier recours lorsqu’un attribut est recherché dans un<br />

objet. Cette méthode ne surcharge pas le fonctionnement normal afin de permettre à<br />

__setattr__(), lorsqu’elle est surchargée, d’accéder aux attributs normalement.<br />

121

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

Saved successfully!

Ooh no, something went wrong!