在python中动态构建类型

时间:2010-08-03 16:29:42

标签: 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类型相关的值,我需要根据toplevel生成subordinate_type实例化。

1 个答案:

答案 0 :(得分:1)

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

但听起来你想在类本身上引用动态创建的类“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()