python - Python 中的通用类工厂

标签 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

最佳答案

你可以使用赋值:

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/

相关文章:

python - 为什么在cx_Oracle.SYSDBA模式下系统登录被拒绝

java - 继承类型问题: is there a clean solution?

c++ - 用于顺序处理的高效通用缓冲队列

python - Pandas groupby 并将函数应用于数字列

python - 使用 __getattr__ 覆盖魔术方法

python - 请求 ssl.SSLEOFError : EOF occurred in violation of protocol (_ssl. c:777)

python - 在 Google App Engine 中的 redirect() 函数中在页面之间传递数据

java - Object 类的 equals() 方法

regex - python 中单词列表中的单词标记化?

python - 如何从 Python 中的列表中分离值?