Python:从子类调用超级关键字

Python : super key word calling from child class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Parent01(object):
    def foo(self):
        print("Parent01")
        pass

class Parent02(object):
    def foo(self):
        print("Parent02")
        pass

class Child(Parent01,Parent02):
    def foo(self):
        print("Child")
        super(Parent01, self).foo()
    pass

c = Child()
c.foo()

输出:

1
2
Child
Parent02

为什么这里是输出Parent02


你误用了super。你应该给自己的班级命名,而不是家长。考虑到这是python 3,您甚至不需要这样做,一个简单的:

1
super().foo()

可能有效(只要函数的第一个参数是单个参数,不管名称如何;当您通过*args接受self时有例外,但这很少见,而且只适用于涉及模拟dict的复杂情况)。

它的错误行为是因为你已经明确地告诉它你在做基于Parent01super,而不是基于Child,所以它扫描mro(方法解析顺序),在Parent01之后找到下一个类,正好是Parent02