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.

128<br />

Éléments du langage<br />

DEUXIÈME PARTIE<br />

Constructeur statique<br />

Lorsqu’une classe dérivée d’object est instanciée, la méthode spéciale __new__() est<br />

appelée par l’interpréteur si elle est implémentée.<br />

__new__() est une méthode statique de la classe, qui prend en premier paramètre le<br />

type de la classe ainsi que l’ensemble des paramètres de construction. Cette méthode<br />

doit renvoyer une nouvelle instance de la classe, qui devient self.<br />

__init__() est appelée juste après __new__() avec en premier paramètre self puis la<br />

liste des paramètres de construction fournis.<br />

Ce fonctionnement permet de procéder à un certain nombre d’initialisations supplémentaires<br />

au niveau de la classe, que ce soit des manipulations d’attributs statiques ou<br />

des modifications de l’objet nouvellement créé.<br />

Implémenter __new__() consiste en général à appeler la méthode __new__() de la<br />

classe de base, par le biais de la primitive super(), et à procéder à des initialisations<br />

en amont ou en aval de cet appel.<br />

Initialisation de l’instance par __new__() et__init__()<br />

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

... production = 0<br />

... def __new__(cls):<br />

... print("une nouvelle Voiture va sortir de l'usine")<br />

... self = super(Car, cls).__new__(cls)<br />

... cls.production += 1<br />

... return self<br />

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

... print("nouvelle voiture n°%s" % id(self))<br />

... self.immatriculation = '%s XZ 21' % id(self)<br />

...<br />

>>> car = Car()<br />

une nouvelle Voiture va sortir de l'usine<br />

nouvelle voiture n°211950068<br />

>>> car.production<br />

1<br />

>>> car.immatriculation<br />

'211950068 XZ 21'<br />

AVANCÉ Utilisation de __new__()<br />

Le chapitre 13 sur la programmation orientée objet couvre des cas pratiques d’utilisation de<br />

__new__().

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

Saved successfully!

Ooh no, something went wrong!