gpt4 book ai didi

python - 如何在不知道另一个类的基础的情况下动态构建类?

转载 作者:行者123 更新时间:2023-11-30 23:23:57 24 4
gpt4 key购买 nike

我有这门课:

class C(A,B):
....
....
....

我想用 A,B 基数构建一个新类,但我实际上不知道 C 有哪些基数或有多少。

我尝试过: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

关于python - 如何在不知道另一个类的基础的情况下动态构建类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23719775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com