この問題をモデル化する正しい方法を理解できません。 ここで私はあなたに私のコードの最小限のバージョンを与える:2つの実装を1つのクラスにマージするデザインパターン
# -*- 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()
を1つに「TrianglePerimeterCalculator」と「TriangleAreaCalculator」のクラスをマージする優雅な方法はありますが、分離「PerimeterCalculator」を維持し、「AreaCalculator」?
[編集] Kyleがコメントで提案したように、「PerimeterCalculator」と「AreaCalculator」を同時に継承する新しいクラス(「Triangle」と呼ぶこともできます)を作成できますが、 「Triangle」の新しいインスタンスに「PerimeterCalculator」または「AreaCalculator」として動作するように指示できますが、同時に両方ではありません。
あなたは、境界や面積メソッドを持つ、より一般的な「トライアングル」クラスを作成して試すことができます。 – Kyle
Pythonで複数のクラスを継承することができます。クラスCustomClass(BaseClass1、BaseClass2): – Kyle
はい...それは問題を解決しますが、新しい "Triangle"インスタンスが "PerimeterCalculator"または "AreaCalculator"として動作するようにしたいと思いますが、同時に両方ではありません – caspillaga