【发布时间】:2017-09-24 23:51:37
【问题描述】:
我无法找出对这个问题建模的正确方法。 这里我给你一个我的代码的简约版本:
# -*- 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”分开?
[edit] 正如凯尔在 cmets 中建议的那样,我可以创建一个同时继承自“PerimeterCalculator”和“AreaCalculator”的新类(我们称之为“Triangle”),但我想要的是能够告诉“Triangle”的新实例作为“PerimeterCalculator”或“AreaCalculator”,但不能同时作为两者。
【问题讨论】:
-
您可以尝试创建一个更通用的具有周长和面积方法的“三角形”类。
-
您可以从 Python 中的多个类继承。类 CustomClass(BaseClass1, BaseClass2):
-
是的...解决了这个问题,但我想要一个新的“三角形”实例充当“周长计算器”或“面积计算器”,但不能同时使用两者
标签: python inheritance design-patterns python-2.x