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.

Modules<br />

Structuration du code<br />

CHAPITRE 5<br />

Une classe ne bénéficie pas des slots de la classe dont elle dérive.<br />

Les instances ne peuvent plus se voir attribuer de nouveaux attributs<br />

dynamiquement : une erreur AttributeError est retournée. Depuis la version<br />

2.3, il est possible d’ajouter le nom __dict__ aux slots pour autoriser l’ajout dynamique<br />

d’attributs.<br />

Les instances ne peuvent plus bénéficier du mécanisme des weak references.<br />

Cette situation peut être débloquée en ajoutant comme précédemment le nom<br />

__weakref__ aux slots.<br />

Decorators pour les classes<br />

Les decorators directement utilisables en Python sont des fonctions déclarées dans<br />

les built-ins. C’est le cas de staticmethod et classmethod, présentées dans le chapitre<br />

suivant.<br />

Passés les essais dans le prompt Python, il est nécessaire de sauvegarder le code dans<br />

des fichiers, appelés modules. Un module est un objet chargé par l’interpréteur à<br />

partir d’un fichier texte qui contient un regroupement de variables, classes et fonctions.<br />

Le fichier est en en général d’extension .py<br />

Module absmod3.py<br />

#!/usr/bin/python<br />

# -*- coding: utf8 -*-<br />

"""<br />

module absmod3<br />

"""<br />

def only_int(func):<br />

"""Decorator pour vérifier les paramètres."""<br />

def _only_int(arg):<br />

ifnot isinstance(arg, int):<br />

raise TypeError("'%s' doit être un entier" % str(arg))<br />

return func(arg)<br />

return _only_int<br />

@only_int<br />

def absmod3(a):<br />

"""Renvoie 'abs(a) mod 3' pour a entier."""<br />

return abs(a) % 3<br />

133

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

Saved successfully!

Ooh no, something went wrong!