假设我在Python中有一个类对象列表(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)
之外,我还能如何实现它? (在我的实际场景中有三个以上的课程)
答案 0 :(得分:5)
您可以使用type
关键字动态创建类,如:
>>> 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。
答案 1 :(得分:3)
一种方法是创建一个装饰器,然后使用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'>]