从从lis解包的类继承

2024-04-20 04:37:57 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我在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)之外,我还能怎样完成它呢?(在我的实际场景中有三个以上的类)


Tags: 对象列表object场景passclassclasses语法错误
2条回答

可以使用^{}关键字动态创建类,如下所示:

>>> 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()为我们创建一个新类:

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

相关问题 更多 >