假設我構建了一些包含一些實體方法的類:
class A:
def func_of_A(self):
print("foo")
class B:
def func_of_B(self):
print("bar")
如何構造一個物件/變數,它是andc的一個實體AB,以便我可以同時呼叫c.func_of_A()and c.func_of_B()?
我當然可以構建一個新類,繼承自該類A并B使其c成為其中的成員:
class C(A,B):
pass
c = C()
但這不是我要找的。每次我計劃使用已經構建的類的組合時,我都不想創建一個新類。
我還可以創建一個函式來動態定義一個新類并回傳它的一個實體:
def merge(*inherit_from):
class D(*inherit_from):
pass
return D()
c = merge(A,B)
但這已經被詛咒了,因為 now和merge(A,B)all回傳相同的 type 。merge(A)merge(B)<class '__main__.merge.<locals>.D'>
應該有一種預期的方法來做到這一點,不是嗎?
是否有一個解決方案可以很好地適應所涉及的類數量?如果我已經有class A1, class A2, ...,class A100并且我想構建一些c作為實體class A2, class A23, class A72, class A99而不是其他實體,我將如何做到這一點?考慮到 ~2^100 個組合,幾乎不可能為每個組合創建一個新類。
uj5u.com熱心網友回復:
type()正如@deceze 提到的那樣,您可以使用它
>>> class A:
... def a():
... pass
...
>>> class B:
... def b():
... pass
...
>>> def merge(name: str, *parents):
... return type(name, parents, dict())
...
>>> C = merge("C", A, B)
>>> C.a()
>>> C.b()
>>>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/465528.html
上一篇:AccessControlException:使用Hive倉庫時,客戶端無法通過:[TOKEN,KERBEROS]進行身份驗證
