2013-12-07 2 views
-1

내가 코드를 이해하려고 노력 sixohsix 트위터 래퍼보고 발견 된 그 예를 들어 :파이썬 sixohsix 트위터 래퍼

t = Twitter(...) 
t.statuses.home_timeline() 

Theres는 너무 명확없는 상태 또는 home_timeline 방법이나 트위터 클래스 또는 TwitterCall 속성, 여기에 파이썬 마법이 빠져 있습니다. 아무도 저에게 무슨 일이 일어나는지 설명 할 수 있습니까?

미리 감사드립니다.

답변

1

기본적으로 TwitterTwitterCall의 하위 클래스이며 마법은 __getattr__에서 발생합니다. 존재하지 않는 속성에 액세스하는 경우 AttributeError이 표시됩니다.

그런 일이 발생하면 해당 속성을 인수로 사용하여 extend_call을 실행하고 self.callable_cls (이 경우에도 TwitterCall)을 호출합니다. 다른 TwitterCall 개체의 결과입니다. 그런 다음 동일한 트릭이 반복됩니다. 왜냐하면 home_timeline이 해당 객체에 존재하지 않기 때문입니다. 그런 다음이 객체를 호출합니다 (사용자가 home_timeline()을 작성하고 있기 때문에). 그러면 Twitter에 대한 HTTP 요청이 만들어집니다.

가장 쉬운 방법은 코드를 단계별로 실행하여 진행 상황을 확인하는 것입니다. 속성에 액세스 할 때는 __getattr__을 읽고, 메소드 호출을 할 때는 __call__을 읽어야합니다.

+0

팁 주셔서 감사합니다! – Sebastian

1

있습니다. line 141입니다. __getattr__에 관해 읽어야합니다. uriparts는 모든 속성을 결합하여, 트위터 API를 호출에 예에서

은 모두 TwitterCall 클래스에 정의되지 않은 특성 (또는 그 자손 Twitter), 즉 AttributeErrorobject.__getattr__에 의해 제기되는 경우이다가, 반복적으로 번역 튜플.

예를 들어, 재귀가 끝날 때 statuses.home_timeline URI에 대한 호출이 이루어집니다.

+0

알아 들었어! 감사! – Sebastian