2012-07-05 3 views
0

나는 다음과 같은 두 개의 클래스 한 다른 클래스에 속성 할당 :파이썬 : 열거 같은 속성을 사용하고

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

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

그리고 이러한 클래스는 SQL 쿼리 및 결과에 사용되는이 속성은 열거를 시뮬레이션하는 데 사용됩니다 같은 기능. DbResultset에 DbQuery에서 속성을 복사 할 나를 위해 어떤 방법이

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) 

거기에 다음과 같이 쿼리 보인다? 결과 집합에 쿼리를 포함시키지 않으려면 db_resultset.LEVEL 대신 db_resultset.query.LEVEL을 써야 열거 형 서수를 가져올 수 있기를 바랍니다.

나는 __get_attribute__ 메쏘드를 보았지만, 이것은 attribute_name에 의해 색인이 생성된다고 가정합니다.

편집 :

이 코드가 잘못 파이썬, 그것은 내가 묻고 있었는지의 요지를 변경하지 않습니다됩니다. psycopg2 (데이터베이스 라이브러리)는 열거 형의 성능 문자가있는 namedtuples() (python 객체)를 실행할 수 있으므로 업데이트하기가 힘듭니다. D

+1

당신은 어떤 종류의 속성 프록시를 의미합니까? 아마도이게 뭔가? http://code.activestate.com/recipes/510402-attribute-proxy-forwarding-attribute-access/ – cha0site

답변

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과 같이 단순 할 것이라는 것을 알았다. –

관련 문제