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

时间:2010-01-30 23:37:16

标签: python methods polymorphism

我希望能够对一个类进行子类化,并定义__init__,但仍然可以运行旧的__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

编辑为Ignacio Vazquez-Abrams建议。 (是否可以编辑而不会碰撞?)

5 个答案:

答案 0 :(得分:6)

替换

doInitForA()

super(b, self).__init__()

答案 1 :(得分:3)

您可能希望查看此问题:Chain-calling parent constructors in python,特别是使用super(b, self).__init__()方法。

答案 2 :(得分:0)

a.__init__(self)拨打a或导出object并使用super()

答案 3 :(得分:0)

class a:
    def __init__(self):
        self.var1 = 1

class b(a):
    def __init__(self)
        self.var2 = 2
        a.__init__(self)

如果您使用的是python 3,甚至可以编写super().__init__() 请参阅this有关使用super()的问题。

答案 4 :(得分:0)

从你的父亲那里打电话给你父亲的父亲:a.__init__(self)。请注意,您需要将self作为第一个参数传递。如果父c'tor采用更多参数,请在self之后传递它们。