我有这样一个类:
class C(A,B):
....
....
....
我想用基础a,B建立一个新的类,但我实际上不知道C
有哪些基础或有多少。
Ive tried: class D(C.__bases__):
但是我得到错误:
TypeError: Error when calling the metaclass bases
list() takes at most 1 argument (3 given)
现在,如果我做:class D(C.__bases__[0],C.__bases__[1])
,它工作,但我需要这样做,而不知道有多少个碱基。
尝试:
D(','.joing(C.__bases__)):
但是这行不通
要创建一个具有动态基集的类,您必须使用type()
:
def methodname1(self):
pass
D = type('D', C.__bases__, {
'attribute': 42,
'methodname1': methodname1
})
type()
接受类名、一个碱基序列和一个类属性字典。这些包括所有函数。
上面的例子相当于:
class D(A, B):
attribute = 42
def methodname1(self):
pass
如果C
有一个元类,你会使用它;如果您不确定C
是否有元类型,请使用:
D = type(C)('D', C.__bases__, {
'attribute': 42,
'methodname1': methodname1
})
Python 3使这更容易;在这里,参数序列被视为函数调用,包括对*
和**
展开的支持:
class D_in_python_3(*C.__bases__, metaclass=type(C)):
pass