【问题标题】:Class inheritance, how to improve?类继承,如何改进?
【发布时间】:2017-07-26 00:59:50
【问题描述】:

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

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 类上一个一个实例化和声明 有没有办法改进代码?

【问题讨论】:

  • 您正在混合/混淆组合和继承。
  • 另外,大写 O 的 Object 是什么?
  • @AnttiHaapala 很可能他的意思是object

标签: python class inheritance


【解决方案1】:

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

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 正确解决了这个问题

【讨论】:

    【解决方案2】:

    你误解了两个概念。

    例如,您尝试同时进行组合继承。

    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 也成为 A 对象。”换句话说,以下工作:

    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,上述语法会略有不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      相关资源
      最近更新 更多