나는 상응하는 의미의 세 가지 메소드를 가진 추상 클래스를 가지고있다 - 그들은 비싼 변환 함수를 사용하여 서로의 관점에서 정의 될 수있다. 나는 메소드 중 하나를 오버라이드하고 자동으로 다른 두 개를 얻는 데 필요한 파생 클래스를 작성할 수 있기를 원합니다. 예세 가지 방법을 순환 방식으로 정의하는 방법은 무엇입니까?
class FooBarBaz(object):
def foo(self, x):
return foo_from_bar(self.bar(x))
# OR return foo_from_baz(self.baz(x))
def bar(self, x):
return bar_from_foo(self.foo(x))
# OR return bar_from_baz(self.baz(x))
def baz(self, x):
return baz_from_bar(self.bar(x))
# OR return baz_from_foo(self.foo(x))
class Derived1(FooBarBaz):
def bar(self, x):
return 5
# at this point foo = foo_from_bar(5) and
# baz = baz_from_bar(5), which is what I wanted
class Derived2(FooBarBaz):
def foo(self, x):
return 6
# at this point bar = bar_from_foo(6) and
# baz = baz_from_bar(bar_from_foo(6)),
# which is not ideal, but still works
class Derived3(FooBarBaz):
def baz(self, x):
return 7
# at this point foo and bar remain defined
# in terms of each other, which is a PROBLEM
나는 각 변환 클래스에 사용할 변환을 명시 적으로 알 수 있습니다. 부모 클래스가 자식을 수정하지 않고이를 스스로 알아낼 수있는 방법이 있는지 알고 싶습니다.
아래의 답변에서 알 수 있듯이, 어떤 방법을 사용할지 결정하는 것은 전환 비용이 얼마나 큰지, 실제로 대안이 3 개 또는 20 개인지 여부에 따라 결정됩니다. 후자는 필요한 경우 여러 번 전환을 피하면서 좋은 운동을 얻을 것입니다 :-D. –