[英]How to change the base class in 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類已經大量使用,因此我不想更改它。
更改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進行操作。
請注意,您的問題是“ 如何在運行時動態更改實例的基類?”的副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.