2013-10-21 6 views
1

다음 장식 된 파이썬 함수에서 요청 및 request.db의 범위를 이해하는 데 어려움을 겪고 있습니다 (이 함수는 피라미드 "하나의 파일에있는 Todo 목록 응용 프로그램"자습서의 일부입니다) :피라미드 함수 내의 객체 범위

@subscriber(NewRequest) 
def new_request_subscriber(event): 
    request = event.request 
    settings = request.registry.settings 
    request.db = sqlite3.connect(settings['db']) 

나는 함수에서 할당이 전역으로 선언하지 않는 한 그 함수에 대한 범위가 제한 알았는데; 그래서 내 잘못 이해에 따르면, request와 request.db는 함수가 완료되면 범위를 벗어날 것입니다. 하지만이 경우에는 request.db가 다른 함수 내에서 연속적으로 액세스되기 때문에 분명히 오인됩니다. 누군가가 마법 물건의 요청과 요청의 기원과 범위를 설명 할 수 있습니까?

답변

4

request은 실제로 event.request의 로컬 별칭입니다. 다음과 같이 그 기능을 다시 작성할 수 있습니다 :.

def new_request_subscriber(event): 
    event.request.db = sqlite3.connect(event.request.registry.settings['db']) 

그래서 우리가하고있는 모두에 전달되는 event 객체의 속성을 수정이다 파이썬은 실제 객체를 전달하기 때문에 수정이 기능이라고 무엇이든 볼 수됩니다 .