2012-07-05 68 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