python中的多重继承

multiple inheritance in python with super

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Parent1(object):
    def foo(self):
        print"P1 foo"

    def bar(self):
        print"P1 bar"


class Parent2(object):
    def foo(self):
        print"P2 foo"

    def bar(self):
        print"P2 bar"



class Child(Parent1, Parent2):
    def foo(self):
        super(Parent1, self).foo()

    def bar(self):
        super(Parent2, self).bar()

c = Child()
c.foo()
c.bar()

目的是从parent1继承foo(),从parent2继承bar()。但是,parent2和c.bar()得到的c.foo()是重用错误。请指出问题并提供解决方案。


您可以直接在父类上调用方法,手工提供self参数。这应该给你最高的控制水平,也是最容易理解的方法。但从其他角度来看,这可能是次优的。

这里只有Child类,其余代码保持不变:

1
2
3
4
5
6
class Child(Parent1, Parent2):
    def foo(self):
        Parent1.foo(self)

    def bar(self):
        Parent2.bar(self)

使用所描述的更改运行代码段会得到所需的输出:

1
2
P1 foo
P2 bar

请参阅此代码在ideone.com上运行