考虑一个具有以下结构的类:
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
最佳答案
你可以使用赋值:
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
无论哪种方式,生成的类都是重新创建的(它们不会在调用之间共享)。
关于python - Python 中的通用类工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33825449/