类继承,如何改进?

时间:2017-07-26 00:59:50

标签: python class inheritance

我有一个小问题让我感到沮丧,我有这部分代码:

class A(object):
    def __init__(self):
        self.variable = "Hello World!!!"

class B(A):
    def __init__(self):
        self.A = A()
        self.inherited = self.A.variable

问题是我在A类上有一堆变量我不想实例化并在B类上逐一声明 有没有办法改进代码?

2 个答案:

答案 0 :(得分:0)

你误解了两个概念。

例如,您正尝试同时执行组合

class A(Object):
    def __init__(self):
        self.variable = "Hello World!!!"

class B(A):
    def __init__(self):
        self.A = A()
        self.inherited = self.A.variable

当你这样做时,你会说,“让B也成为一个对象。”换句话说,以下工作:

class A(object): # can omit this (object) in python3
  def __init__(self):
    self.value_from_a = 'Im from A!'

class B(A):
  def __init__(self):
    super().__init__()
    self.value_from_b = 'im a bbbbb!'


b = B()
print(b.value_from_a)
print(b.value_from_b)

所以,在你的情况下,这样做的方法是不要试图使A既是B的基础也是B的一部分。

请注意,如果您使用的是Python2,则上述语法略有不同。

答案 1 :(得分:0)

您正在使用组合和继承的混合。看起来你想专门使用组合:

class A(Object):
    def __init__(self):
         self.c = C()
         self.e = E()

class B(Object):
    def __init__(self):
        self.c = C()
        self.d = D()

CDE是将变量和方法组合在一起的组件。现在A和B只共享C的组件。您应该寻找更完整的组合教程

编辑:实际上只是仔细检查它看起来就像你对实例化超类变量感到困惑。其他答案使用super

正确解决了这个问题