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.

collections<br />

Utilisation de __subclasshook__<br />

Principaux modules, partie 2<br />

CHAPITRE 9<br />

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

... __metaclass__ = ABCMeta<br />

... @abstractmethod<br />

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

... return 0<br />

... @classmethod<br />

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

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

... if any("__len__" in B.__dict__ for B in C.__mro__):<br />

... return True<br />

... return NotImplemented<br />

...<br />

Pour chaque appel issubclass(C, Sized), cette méthode doit retourner True si la<br />

classe C implémente __len__ et NotImplemented (ou False) si elle ne l’implémente pas.<br />

Il n’est donc plus utile lorsque __subclasshook__ est implémentée, d’appeler<br />

register : toute classe testée par le biais de issubclass sera validée par cette méthode.<br />

Test du hook sur des classes arbitraires<br />

>>> issubclass(list, Sized)<br />

True<br />

>>> issubclass(object, Sized)<br />

False<br />

Le module collections, présenté ci-dessous, fournit une série d’ABC (Abstract Base<br />

Classes).<br />

Ajouté dans la version 2.4, le module collections introduit des conteneurs de données<br />

très performants, à savoir :<br />

deque : une file à double entrée ;<br />

defaultdict : un mapping avec valeur par défaut ;<br />

namedtuple : un tuple avec des accesseurs nommés.<br />

Enfin, collections introduit un certain nombre d’ABC.<br />

Le type deque<br />

Le type deque est un conteneur qui fonctionne comme une file, mais permet d’ajouter et<br />

de récupérer des données des deux cotés de la file, avec les mêmes performances.<br />

281

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

Saved successfully!

Ooh no, something went wrong!