考虑具有以下结构的类:
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
答案 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})
})