2012-07-05 19 views
0

我有以下兩類屬性到其他類:蟒蛇:使用屬性爲枚舉,然後分配

class DbQuery: 
    def __init__(self,query): 
     self.query = query 

class DbResultSet: 
    def __init__(self,query): 
     self.result = [] 

而且這些類用於SQL查詢和結果,屬性是用來模擬枚舉類功能。查詢如下:

q_forum_heirarchy =\ 
    type( "RtDbQuery", 
      DbQuery("""SELECT level, id, parent_id, name 
         FROM forum_heirarchy_node 
         WHERE forum_id = :f_id 
         AND level != 0 
         ORDER BY level ASC;"""), 
      LEVEL=0, ID=1, PARENT_ID=2, NAME=3) 

有沒有什麼方法可以將屬性從DbQuery複製到DbResultset中?我不想將查詢嵌入到結果集中,因爲那樣我就不得不寫db_resultset.query.LEVEL而不是db_resultset.LEVEL才能進入枚舉序列。

我看到__get_attribute__方法,但我想這是由attribute_name索引。

編輯

代碼是無效的蟒蛇,它不會改變的,我問什麼要點。我發現psycopg2(數據庫庫)可以做namedtuples()(python對象與enums的性能字符),所以我不能打擾地更新它:D

+1

你的意思是某種屬性代理?這樣的事情可能嗎? http://code.activestate.com/recipes/510402-attribute-proxy-forwarding-attribute-access/ – cha0site 2012-07-05 14:12:18

回答

1

我認爲你應該使用__getattr__方法。當找不到類屬性時,查找機制使用此方法。

class DbQuery(object): 
    def __init__(self,query): 
     self.query = query 

class DbResultSet(object): 
    def __init__(self, dbquery): 
     self.result = [] 
     self.dbquery = dbquery 
    def __getattr__(self, name): 
     return getattr(self.dbquery,name) 
+0

賓果!我知道這會是這樣簡單的<3。 – 2012-07-05 14:31:05