代码之家  ›  专栏  ›  技术社区  ›  Ponkadoodle

多态性-在覆盖现有方法的同时添加它们

  •  2
  • Ponkadoodle  · 技术社区  · 16 年前

    我希望能够子类化一个类,并定义 __init__ 但还是老样子 爱因斯坦 也。

    举例来说,假设我有以下课程:

    class A(object):
        def __init__(self):
            self.var1 = 1
    
    class B(A):
        def __init__(self)
            self.var2 = 2
            doInitForA()
    

    我希望能够做到:

    instB = B()
    print (instB.var1) #1
    print (instB.var2) #2
    

    根据伊格纳西奥·瓦兹奎兹·艾布拉姆斯的建议进行编辑。(是否可以在不碰撞的情况下进行编辑?)

    5 回复  |  直到 16 年前
        1
  •  0
  •   Ignacio Vazquez-Abrams    16 年前

    任一呼叫 a.__init__(self) 或衍生 a object 使用 super() .

        2
  •  6
  •   Mike Sherov    16 年前

    代替

    doInitForA()
    

    具有

    super(b, self).__init__()
    
        3
  •  3
  •   Community Mohan Dere    9 年前

    你可能想看看这个问题: Chain-calling parent constructors in python ,具体使用 super(b, self).__init__() 方法。

        4
  •  0
  •   Community Mohan Dere    9 年前
    class a:
        def __init__(self):
            self.var1 = 1
    
    class b(a):
        def __init__(self)
            self.var2 = 2
            a.__init__(self)
    

    你甚至可以写 super().__init__() 如果您使用的是python 3。
    this 关于使用的问题 super() .

        5
  •  0
  •   Alexander Gessler    16 年前

    从你的职责范围内打电话给你父亲的职责: a.__init__(self) . 注意你需要通过 self 作为第一个参数。如果父对象接受更多参数,请在 自己 .