Je n'arrive pas à trouver la bonne façon de modéliser ce problème. Ici je vous donne une version de mon code minimaliste:Design Pattern pour fusionner deux implémentations en une seule classe
# -*- coding: utf-8 -*-
from abc import ABCMeta, abstractmethod
class AreaCalculator():
__metaclass__ = ABCMeta
def __init__(self):
pass
@abstractmethod
def getArea(self):
pass
def compute(self):
self.getArea()
class PerimeterCalculator():
__metaclass__ = ABCMeta
def __init__(self):
pass
@abstractmethod
def getPerimeter(self):
pass
def compute(self):
self.getPerimeter()
class TriangleAreaCalculator(AreaCalculator):
def __init__(self):
AreaCalculator.__init__(self)
def getArea(self):
return area
class TrianglePerimeterCalculator(PerimeterCalculator):
def __init__(self):
PerimeterCalculator.__init__(self)
def getPerimeter(self):
return perimeter
a = TriangleAreaCalculator()
b = TrianglePerimeterCalculator()
Y at-il une façon élégante de fusionner les classes « TrianglePerimeterCalculator » et « TriangleAreaCalculator » en un seul, mais en gardant « PerimeterCalculator » et « AreaCalculator » séparés? Comme Kyle l'a suggéré dans les commentaires, je peux créer une nouvelle classe (appelons-la "Triangle") qui hérite de "PerimeterCalculator" et "AreaCalculator" en même temps, mais ce que je veux, c'est être capable de dire à une nouvelle instance de "Triangle" de se comporter comme "PerimeterCalculator" ou "AreaCalculator", mais pas les deux en même temps.
Vous pouvez expérimenter avec la création d'une classe "Triangle" plus générique qui a une méthode de périmètre et la surface. – Kyle
Vous pouvez hériter de plusieurs classes en Python. classe CustomClass (BaseClass1, BaseClass2): – Kyle
Oui ...cela résout le problème, mais je voudrais qu'une nouvelle instance "Triangle" se comporte comme "PerimeterCalculator" ou "AreaCalculator" mais pas les deux en même temps – caspillaga