2024-04-20 04:37:57 发布
网友
假设我在Python(A, B, C)中有一个类对象列表,并且我希望在构建类D时继承所有这些对象,例如:
A, B, C
D
class A(object): pass class B(object): pass class C(object): pass classes = [A, B, C] class D(*classes): pass
不幸的是,我得到一个语法错误,当我这样做。除了写class D(A, B, C)之外,我还能怎样完成它呢?(在我的实际场景中有三个以上的类)
class D(A, B, C)
可以使用^{}关键字动态创建类,如下所示:
>>> classes = [A, B, C] >>> D = type('D', tuple(classes), {}) >>> type(D) <class 'type'> >>> D.__bases__ (<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>)
有关更多示例,请参见15247075。你知道吗
一种方法是创建一个decorator,然后使用type()为我们创建一个新类:
type()
def modify_bases(bases): def decorator(cls): return type(cls.__name__, tuple(classes), dict(cls.__dict__)) return decorator ... >>> %cpaste @modify_bases(classes) class D: x = 1 y = 2 >>> D.mro() [<class '__main__.D'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <type 'object'>]
可以使用^{} 关键字动态创建类,如下所示:
有关更多示例,请参见15247075。你知道吗
一种方法是创建一个decorator,然后使用
type()
为我们创建一个新类:相关问题 更多 >
编程相关推荐