我無法弄清楚對這個問題建模的正確方法。 在這裏,我給你我的代碼簡約版本:將兩個實現合併到一個類中的設計模式
# -*- 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()
是否有「TrianglePerimeterCalculator」和「TriangleAreaCalculator」類合併成一個優雅的方式,但保持「PerimeterCalculator」和「AreaCalculator」分開嗎?由於Kyle在評論中提出建議,我可以創建一個同時繼承「PerimeterCalculator」和「AreaCalculator」的新類(我們稱之爲「Triangle」),但我想要的是能夠告訴「三角形」的新實例表現爲「周長計算器」或「區域計算器」,但不能同時出現。
您可以創建具有周長和麪積的方法更通用的「三角」類實驗。 – Kyle
您可以從Python中的多個類繼承。 class CustomClass(BaseClass1,BaseClass2): – Kyle
是...解決了這個問題,但是我想要一個新的「三角」實例表現爲「PerimeterCalculator」或「AreaCalculator」,但不能同時使用 – caspillaga