Python父类init调用子级的覆盖方法

时间:2018-07-25 08:40:49

标签: python python-3.x oop

请查看下面的示例代码。父类需要调用setup()函数,但是该函数需要在子类中定义/覆盖。但是下面的示例代码显示,初始化child并调用super()时,super的方法将调用不包含任何内容的父级setup()

预期的行为是实例化子级时,它将使用__init__调用父级的super(),并自动调用子级中定义的设置函数。将Human.setup()设置为抽象类似乎也不起作用。

Google只能找到有关如何从子级调用父级方法的信息,但这种情况恰恰相反,即“如何从父级调用子级方法”。还是在python3中不可能?

之所以需要调用子程序的设置函数是因为每个子类将具有不同的设置过程。但是它们共享父类中定义的大多数方法。

class Human(object):
    def __init__(self):
        self.setup()

    def setup(self):
        pass

class child(Human):
    def __init__(self):
        super()

    def setup(self):
        self.name = "test"

>>> A = child()
>>> A.name
    AttributeError: 'child' object has no attribute 'name'

1 个答案:

答案 0 :(得分:0)

您不是从Human的{​​{1}}呼叫__init__的{​​{1}}。

child为您提供了调用超类方法的句柄,但是您需要通过对__init__进行方法调用来实现。

在这种情况下:

super()