2

次のコードを機能させる方法を知っている人はいますか?

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: メタクラス ベース メタクラスの競合を呼び出すときにエラーが発生しました: 派生クラスのメタクラスは、そのすべてのベースのメタクラスの (厳密ではない) サブクラスでなければなりません

4

1 に答える 1

5

どうですか:

return type(kwargs.get('name'),(TargetClass,)+args,{})

それ以外の:

class MixedClass(TargetClass, *args):
    pass

MixedClass.__name__ = kwargs.get('name')
return MixedClass

そしてもちろん、スクリプトの最後の行はおそらく無効なSyntaxErrorasを上げていdef whatever = somethingます。それはおそらく次のようになります。

UberFoo = mixin(Foo,Bar,Baz,Bot,Quux,Muck,name='UberFoo')
于 2013-06-18T16:18:51.647 に答える