2010-08-03 61 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()