开发者社区 问答 正文

注册元编程类

我想使用Python的元编程功能以编程方式创建类。我可以看到这里如何实例化Foo

 Foo = type('Foo', (), {})
 foo = Foo()

但是如果类型调用发生在函数中呢?我怎样才能让Foo以与类Foo(): pass相同的方式注册?我想在不维护类变量foo的情况下调用foo = foo()。 问题来源StackOverflow 地址:/questions/59386841/register-metaprogramming-class

展开
收起
kun坤 2019-12-25 21:47:44 416 分享 版权
1 条回答
写回答
取消 提交回答
  • 作为一个全球:

    def def_Foo():
        global Foo
        Foo = type('Foo', (), {})
    
    def_Foo()
    foo = Foo()
    

    作为模块的一部分:

    import types
    
    quux = types.ModuleType('quux')     # skip if you already have a module
    def def_quux_class(name):
        setattr(quux, name, type(name, (), {}))
    
    def_quux_class("Foo")
    foo = quux.Foo()
    

    定义一个任意的顶层类:

    def def_class(name):
        globals()[name] = type(name, (), {})
    
    def_class("Foo")
    foo = Foo()
    
    2019-12-25 21:47:50
    赞同 展开评论
问答分类:
问答地址: