python - 在python中动态构建类型

标签 python types metaprogramming

假设我正在构建一组复合类型:

def subordinate_type(params):
   #Dink with stuff
   a = type(myname, (), dict_of_fields)
   return a()

def toplevel(params)
    lots_of_types = dict(keys, values)
    myawesomedynamictype = type(toplevelname, (), lots_of_types)

    #Now I want to edit some of the values in myawesomedynamictype's 
    #lots_of_types. 

    return myawesomedynamictype()

在这种特殊情况下,我想引用插入到 lots_of_types 中的“类型类”myawesomedynamictype

我尝试遍历 lots_of_types 并设置它,假设引用指向同一事物,但我发现 myawesomedynamictype 已损坏并丢失它的领域。

我要解决的问题是我得到了与类型subordinate_type相关的值,我需要生成一个基于subordinate_type的toplevel实例化

最佳答案

这是一个古老的问题,因为不清楚代码试图做什么(作为代码要点而不是工作代码),所以有点难以回答。

但听起来您想要在类本身上引用动态创建的类“myawesomedynamictype”。当您调用 type() 来构造它时,字典 lots_of_types 的副本(我相信是副本)成为这个新类的 __dict__

因此,只需在类上设置一个新属性,使其具有您刚刚构建的类的值;这就是你想要的吗?

def toplevel(params)
    lots_of_types = dict(keys, values)
    myawesomedynamictype = type(toplevelname, (), lots_of_types)
    myawesomedynamictype.myawesomedynamictype = myawesomedynamictype
    return myawesomedynamictype()

关于python - 在python中动态构建类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3398586/

相关文章:

python - 如何声明函数本身具有某种类型?

types - InstallScript 数据类型大小写

ruby - 评估和绑定(bind) : what are they useful for?

python - 动态加载类中的类标识 vs.通过导入加载的类

python - 如何使用 Python Pandas 合并多个 CSV 文件

Python MySQLdb 语法错误,语法看似正确

python - celery :消费者:无法连接到 amqp://guest:**@127.0.0.1:5672//:[Errno 92] 协议(protocol)不可用

python - 调用StartInstances操作时发生客户端错误(UnauthorizedOperation)

R:使用因子

c++ - 创建一个包含可变类型的元组