簡體   English   中英

如何在Python中更改基類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM