这是一个设计问题。我很困惑如何在下面的问题场景中使用组合:
class A(object):
def __init__(self,a,b,c=None,d=None,e=None,f=None):
do_something()
def result():
#Does some basic processing
class B(A):
def __init__(self,a,b,e):
super(B,self).__init__(a,b,e=e)
self.some_variable = True
def result(self):
#Does some advanced processing
class C(A):
def __init__(self,a,b,c=None,d=None,e=None):
super(C,self).__init__(a,b,c,=c,d=d,e=e)
self.b = B(a,b,e=e)
这个问题是C类创建了一个B类对象作为组合,但B再次为其超类A调用__init__
。所以我想避免再次通过类C调用类A的构造函数。
答案 0 :(得分:0)
从A扩展C是有道理的,因为C是A的扩展。而C通过合成访问B的功能。
我不懂python,但是你想要我可以共享实现它的Java代码。
C类(A):
def __init__(self,a,b,c=None,d=None,e=None):
super(C,self).__init__(a,b,c,=c,d=d,e=e) # assuming it is inheritance.
self.b = B(a,b,e=e) # assuming it is composition
def result(self):
self.b.result #Does some advanced processing
# access functionality of B, via object (composition)
def other_functions_2(self):
self.functionality2 # can access functionality of A, via inheritance