【发布时间】:2013-06-14 23:12:28
【问题描述】:
有谁知道我如何让下面的代码工作?
def mixin(TargetClass, *args, **kwargs):
"""*args is a bunch of classes to mixin to the TargetClass"""
if kwargs.get('name') is None:
kwargs['name'] = '%s_mixed_with_%s' % (TargetClass.__name__, "".join(map(str, args)))
class MixedClass(TargetClass, *args):
pass
MixedClass.__name__ = kwargs.get('name')
return MixedClass
# assume for all intents and purposes that Foo, Bar, Baz, Bot, Quux, and Muck are Classes
# Foo should inherit from all of Bar, Baz, Bot, Quux, and Muck
def uber_foo = mixin(Foo, Bar, Baz, Bot, Quux, Muck, name="UberFoo")`
现在 Python 解释器 (2.7.5) 引发以下错误:
TypeError:调用元类库时出错 元类冲突:派生类的元类必须是其所有基类的元类的(非严格)子类
【问题讨论】:
-
你的一些
Foo、Bar、Baz等类型有元类吗? (您可以通过检查type(Foo)并寻找任何不是type的东西来找出答案。)如果一组mixin 有多个不同的元类,您将收到有关冲突的错误,就像您描述的那样。您可以尝试创建一个组合的元类,但我担心它无法正常工作(许多元类具有很深的魔力,而且它们不太可能在编码时考虑到协作多重继承)。