Python中的通用类工厂

时间:2015-11-20 11:20:51

标签: python oop python-3.x

考虑具有以下结构的类:

class Foo(object):
    # ...
    class Meta:
        goo = 1

如果我Foo,我会Foo.Meta.goo == 1。什么是创建抽象类工厂foo_factory的正确方法,以便我可以调用:

>>> Clazz = foo_factory(goo=2)
>>> Clazz
<class '__main__.Foo'>
>>> Clazz.Meta.goo
2

2 个答案:

答案 0 :(得分:4)

您可以使用作业:

def foo_factory(goo):
    class Foo(object):
        class Meta:
            pass
    Foo.Meta.goo = goo
    return Foo

我创建了类作为嵌套结构;您可以使用type()来电,但我发现上述内容更具可读性。

或者您可以为闭包使用不同的名称:

def foo_factory(goo):
    goo_value = goo  # provide a closure with a non-conflicting name
    class Foo(object):
        class Meta:
            goo = goo_value
    return Foo

无论哪种方式,生成的类都是重新创建的(它们不在调用之间共享)。

答案 1 :(得分:0)

我会根据你的观点相信你。我的正常答案是&#34; OMG为什么?????&#34; ;)

def foo_factory(goo):
    return type('Foo', (), {
        'Meta': type('Meta', (), {"goo": goo})
        })