0

私は次の2つのクラスを持っています:

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 に答える