代码之家  ›  专栏  ›  技术社区  ›  Paul Nathan

在python中动态构建类型

  •  3
  • Paul Nathan  · 技术社区  · 14 年前

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

    myawesomedynamictype

    我试着反复浏览了一遍 lots_of_types 设置它,假设引用指向同一个对象,但我发现 myawesomedynamictype 被破坏并失去了它的能量场。

    我试图解决的问题是,我得到了与类型相关的值 subordinate_type ,我需要生成一个 toplevel 基于 从属类型 .

    1 回复  |  直到 14 年前
        1
  •  1
  •   Matt Anderson    13 年前

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

    但听起来您希望在类本身上引用动态创建的类“myawesomedynamictype”。这本词典的一本(我相信是一本)多种类型的词典成了流行语 __dict__ 当您调用type()来构造这个新类时。

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

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