更改继承层次结构中的基类

时间:2012-06-20 19:30:10

标签: python inheritance

我有类似

的类结构
class A:
    def method1(self):
        return 1

class B:
    def method2(self):
        return 2

class C(A,B):
    def method3(self):
        return self.method1()+self.method2()

AB提供了类C通过一些包装器收集和丰富的功能。现在碰巧我需要一个类似的类C2,它来自不同的实现A2而不是Aclass C2(A2, B)具有相同的method3

您如何实现这样的设计(C可以从不同的实现类派生出来?)

如果它与高级Python编程(元类?)有关,那么可以赞赏一个例子:)

1 个答案:

答案 0 :(得分:4)

class CMixin:
    def method3(self):
        return self.method1()+self.method2()

class C1(A,B, CMixin):
    pass

class C2(A2,B, CMixin):
    pass

虽然您描述的设计听起来像是要聚合而不是:

class C:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def method3(self):
        return self.a.method1() + self.b.method2()


c1 = C(a1, b)
c2 = C(a2, b)