Python多重继承问题

Python multiple inheritance questions

很抱歉,如果以前问过这个问题,我在搜索其他问题时找不到答案。

我对python还不熟悉,我对多重继承也有问题。假设我有两个类B和C,它们继承自同一个类A,定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class B(A):
    def foo():
        ...
        return

    def bar():
        ...
        return


class C(A):
    def foo():
        ...
        return

    def bar():
        ...
        return

现在我想定义另一个类D,它从B和C继承。D应该继承B对foo的实现,但C对bar的实现。我该怎么做?


抵制说"首先避免这种情况"的诱惑,一个(不一定是优雅的)解决方案可以是明确地包装这些方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
class A: pass

class B( A ):
    def foo( self ): print( 'B.foo')
    def bar( self ): print( 'B.bar')

class C( A ):
    def foo( self ): print( 'C.foo')
    def bar( self ): print( 'C.bar')

class D( B, C ):
    def foo( self ): return B.foo( self )
    def bar( self ): return C.bar( self )

或者,您可以使方法定义显式,而不进行包装:

1
2
3
class D( B, C ):
    foo = B.foo
    bar = C.bar