2016-07-15 47 views
0

说我有以下如何改变在Python的基类

Class A(object): 
    base Functions 

Class B (A): 
    some useful functions 

Class C(object) 
    req base functions 

现在我要创建具有不同于B,而不是函数的所有函数的类从A指的是从功能C. 东西像

Class D(B,C) 
    and when B calls super it should look in C instead of A 

,我实现它现在复制粘贴整个B级和由C继承只是代替A. 有没有更好的办法来解决这个问题的方法?

成分可以肯定地解决问题,但B类已经在大量使用,所以我不想改变它。

+0

很肯定重复,这是你在找什么http://stackoverflow.com/questions/3277367/how-does-pythons-super-work-with-multiple - 继承。如果不是,你可以指定它有什么不同? –

回答

0

更改B类的__bases__属性。

那么,它的丑陋,但它的工作原理:

class A(object): 
    def f(self): 
     print("A.f()") 

class B (A): 
    def g(self): 
     print("B.g()", end=": ") 
     super(B, self).f() 

class C(object): 
    def f(self): 
     print("C.f()") 


B.__bases__ = (C,) 
b = B() 
b.g() 

你得到:

B.g(): C.f() 

您可以使用您的fudge.patch单元测试过程中做到这一点。

请注意,你的问题是How to dynamically change base class of instances at runtime?

+0

感谢Laurent。我不知道这个功能。但我想创建一个新的类D,它完全像B只从C继承。我不想改变B本身的基础。 B的对象不应该看到任何改变。 –