2010-08-03 46 views
3

假设我建立一个复合类型集合:动态建立类型蟒蛇

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实例。

+0

你可以发表一些演示问题的玩具代码吗? – unutbu 2010-08-03 16:51:02

+0

为什么你的基类不是'object'? – SilentGhost 2010-08-03 17:06:40

+0

@SilentGhost:它似乎并不需要。 – 2010-08-03 17:17:24

回答

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()