Python构造函数链接和多态

时间:2015-09-17 09:18:36

标签: python oop

我试图学习Python的OOP标准,我写了一个非常简单的代码

class Human(object):
    def __init__(self):
        print("Hi this is Human Constructor")

    def whoAmI(self):
        print("I am Human")


class Man(Human):
    def __init__(self):
        print("Hi this is Man Constructor")

    def whoAmI(self):
        print("I am Man")


class Woman(Human):
    def __init__(self):
        print("Hi this is Woman Constructor")

    def whoAmI(self):
        print("I am Woman")

看起来很简单呃?男人和女人的经典继承模块,我无法理解的是,当我为女人或男人创建一个对象时,为什么构造函数链不会发生,以及如何在Python中实现多态。

这似乎是一个真实的模糊和noob的提问线,但我无法用其他任何方式。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:5)

__init__()Man都有Woman,因此会覆盖父类__init__()中的Human。如果您希望子类的__init__()调用父级__init__(),则需要使用super()来调用它。示例 -

class Man(Human):
    def __init__(self):
        super(Man, self).__init__()
        print("Hi this is Man Constructor")

class Woman(Human):
    def __init__(self):
        super(Woman, self).__init__()
        print("Hi this is Woman Constructor")

对于Python 3.x,您只需使用 - __init__()调用父super().__init__()