关于oop:python构造函数链接和多态性

Python Constructor Chaining and Polymorphism

本问题已经有最佳答案,请猛点这里访问。

我正在学习Python的OOP标准,我编写了一个非常简单的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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中实现多态性。

这似乎是一个真正含糊不清的问题,但我无法用其他方式表达。任何帮助都将不胜感激


您有一个用于ManWoman__init__(),这样可以覆盖父类Human__init__()。如果希望子类的__init__()调用父类的__init__(),则需要使用super()调用它。示例-

1
2
3
4
5
6
7
8
9
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")

对于python3.x,只需使用-super().__init__()调用父级的__init__()