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

编辑

该代码是无效的python,它不会改变我所问的要点。我发现 psycopg2(数据库库)可以做 namedtuples()(具有枚举性能特征的 python 对象),所以我懒得更新它:D

4

1 回答 1

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)
于 2012-07-05T14:29:29.663 回答