이 문제를 모델링하는 올바른 방법을 알 수 없습니다.두 구현을 하나의 클래스로 병합하는 디자인 패턴
# -*- 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"이라고 부름)를 만들 수 있지만 원하는 것은 "Triangle"의 새 인스턴스에 "PerimeterCalculator"또는 "AreaCalculator"로 동작하도록 지시 할 수 있지만 둘 다 동시에 수행 할 수는 없습니다.
당신은 경계 및 면적 메소드가 더 일반적인 "트라이앵글"클래스를 만드는 실험을 할 수 있습니다. – Kyle
파이썬에서 여러 클래스를 상속받을 수 있습니다. CustomClass 클래스 (BaseClass1, BaseClass2) : – Kyle
예 ...그 문제를 해결하지만 새로운 "삼각형"인스턴스 "PerimeterCalculator"또는 "AreaCalculator"로 행동 할 수 있지만 동시에 둘 다 싶지 않다 – caspillaga