필자는 클래스 상속, 추상 기본 클래스 및 파이썬 인터페이스를 설명하는 설명서를 읽었습니다. 그러나 내가 원하는 것만으로 솔기가없는 것은 아닙니다. 즉, 가상 클래스를 작성하는 간단한 방법입니다. 가상 클래스가 호출되면, 매개 변수가 무엇인지를 기반으로 좀 더 구체적인 클래스를 인스턴스화하고 호출 함수를 다시 돌려 주길 원합니다. 지금은 가상 클래스에 대한 호출을 기본 클래스로 재 라우팅하는 요약 방법이 있습니다. 단이 기능은 전달받을()는 number_of_edges 호출로,가상 수업 : 제대로하고 있습니까?
class Shape:
def __init__(self, description):
if description == "It's flat": self.underlying_class = Line(description)
elif description == "It's spiky": self.underlying_class = Triangle(description)
elif description == "It's big": self.underlying_class = Rectangle(description)
def number_of_edges(self, parameters):
return self.underlying_class(parameters)
class Line:
def __init__(self, description):
self.desc = description
def number_of_edges(self, parameters):
return 1
class Triangle:
def __init__(self, description):
self.desc = description
def number_of_edges(self, parameters):
return 3
class Rectangle:
def __init__(self, description):
self.desc = description
def number_of_edges(self, parameters):
return 4
shape_dont_know_what_it_is = Shape("It's big")
shape_dont_know_what_it_is.number_of_edges(parameters)
내 재 라우팅 멀리 최적로부터 :
아이디어는 다음과 같다. 이런 모양을 Shape에 추가하면 속임수를 쓰지 않습니다.
def __getattr__(self, *args):
return underlying_class.__getattr__(*args)
내가 뭘 잘못하고 있니? 전체 아이디어가 잘못 구현 되었습니까? 어떤 도움이라도 대단히 감사합니다.
def factory(description):
if description == "It's flat": return Line(description)
elif description == "It's spiky": return Triangle(description)
elif description == "It's big": return Rectangle(description)
나 :
'. 즉, 클래스는'object'의 서브 클래스 여야합니다. –
당신이하려는 것은 "가상 클래스"가 아닌 가상 생성자를 가진 클래스라고도합니다.관련 질문보기 [_ 정확히 클래스 공장입니까?] (http://stackoverflow.com/questions/2526879/what-exactly-is-a-class-factory) – martineau