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.

Les primitives<br />

CHAPITRE 6<br />

appelée depuis la classe ou depuis n’importe quelle instance, sachant que dans tous<br />

les cas, le premier paramètre implicite est la classe et non l’instance.<br />

classmethod est utilisée le plus souvent pour des fonctions qui génèrent une instance<br />

de la classe donnée. Comme il n’est pas nécessaire pour cette fonction de connaître<br />

autre chose que la classe, on peut alors opter pour une méthode de classe. C’est le cas<br />

par exemple de la méthode fromkeys() pour les dictionnaires.<br />

La méthode de classe fromkeys()<br />

class UserDict:<br />

...<br />

def fromkeys(cls, iterable, value=None):<br />

d = cls()<br />

for key in iterable:<br />

d[key] = value<br />

return d<br />

fromkeys = classmethod(fromkeys)<br />

L’usage veut que le premier paramètre soit noté cls en lieu et place de self.<br />

fromkeys() peut donc être appelée directement depuis la classe ou depuis une instance.<br />

Appel de fromkeys()<br />

>>> from UserDict import UserDict<br />

>>> UserDict.fromkeys([’a’, ’b’, ’c’], 0)<br />

{’a’: 0, ’c’: 0, ’b’: 0}<br />

>>> dico = {}<br />

>>> dico.fromkeys([’a’, ’b', 'c'], 0)<br />

{'a': 0, 'c': 0, 'b': 0}<br />

Enfin, il est possible d’utiliser le decorator classmethod pour simplifier l’écriture.<br />

Utilisation du decorator<br />

class UserDict:<br />

...<br />

@classmethod<br />

def fromkeys(cls, iterable, value=None):<br />

d = cls()<br />

for key in iterable:<br />

d[key] = value<br />

return d<br />

Voir aussi: staticmethod.<br />

155

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

Saved successfully!

Ooh no, something went wrong!