在python 3中,我可以使用列表扩展来动态继承多个超类:

class Super1(object):
    x = 1

class Super2(object):
    y = 1

classes = [Super1, Super2]

class B(*classes):
    pass


这使我可以在运行时决定将哪些混合类添加到超类列表中。

不幸的是,超类列表的*扩展是python2中的语法错误。是否有一种在运行时选择超类列表的公认方法?

最佳答案

您可以使用元类来填充B的基类:

classes = Super1, Super2

class B:
    __metaclass__ = lambda name, _, attrs: type(name, classes, attrs)

print(B.__bases__)


输出:

(<class '__main__.Super1'>, <class '__main__.Super2'>)

关于python - Python 2动态多重继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55752898/

10-11 20:30