我可以避免在派生类的组合中多次调用__init__吗?

时间:2017-03-22 09:35:58

标签: python-2.6 composition

这是一个设计问题。我很困惑如何在下面的问题场景中使用组合:

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的构造函数。

1 个答案:

答案 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