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

Polymorphism - adding to existing methods while overwriting them

我希望能够子类化一个类,并定义__init__,但仍然运行旧的__init__

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

1
2
3
4
5
6
7
8
class A(object):
    def __init__(self):
        self.var1 = 1

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

我希望能够做到:

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

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


代替

1
doInitForA()

具有

1
super(b, self).__init__()

您可能想看看这个问题:在python中链调用父构造函数,特别是使用super(b, self).__init__()方法。


从你的职权范围内打电话给你父亲的职权范围:a.__init__(self)。注意,您需要将self作为第一个参数传递。如果父对象接受更多参数,则在self之后传递这些参数。


1
2
3
4
5
6
7
8
class a:
    def __init__(self):
        self.var1 = 1

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

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


调用a.__init__(self)或从object派生a并使用super()