python:使用属性作为枚举,然后将属性分配给另一个类

时间:2012-07-05 14:08:30

标签: python python-2.7

我有以下两个类:

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索引的。

修改

代码是无效的python,它不会改变我所要求的要点。我发现psycopg2(数据库库)可以做namedtuples()(带有枚举性能字符的python对象),所以我不能再烦恼了:D

1 个答案:

答案 0 :(得分: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)