继承自列表中解压缩的类

时间:2015-06-04 01:00:43

标签: python oop inheritance

假设我在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)之外,我还能如何实现它? (在我的实际场景中有三个以上的课程)

2 个答案:

答案 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'>]