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.

<strong>Programmation</strong> orientée objet<br />

CHAPITRE 14<br />

L’exemple ci-dessous implémente le principe de substitution de Liskov s’assurant<br />

que l’objet passé à A est dérivé du type Base.<br />

Substitution de Liskov en Python<br />

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

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

class Base(object):<br />

""" classe virtuelle pure """<br />

def sous_calcul(self):<br />

raise NotImplementedError<br />

class A:<br />

""" classe utilisatrice """<br />

def __init__(self, sous_objet):<br />

ifnot isinstance(sous_objet, Base):<br />

raise TypeError("A ne travaille qu'avec Base ou dérivés")<br />

self.sous_objet = sous_objet<br />

def calcul(self):<br />

return 1 + self.sous_objet.sous_calcul()<br />

class B(Base):<br />

""" classe B """<br />

def sous_calcul(self):<br />

return 1<br />

class C(Base):<br />

""" classe C """<br />

def sous_calcul(self):<br />

return 2<br />

# Utilisation de A avec B ou C<br />

print(A(B()).calcul())<br />

print(A(C()).calcul())<br />

Ce principe peut également être implémenté avec les ABC présentées au chapitre 9.<br />

Implémentation avec ABC<br />

>>> from abc import ABCMeta, abstractmethod<br />

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

... __metaclass__ = ABCMeta<br />

... @abstractmethod<br />

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

... pass<br />

489

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

Saved successfully!

Ooh no, something went wrong!