2012-08-24 2 views
4

저는 파이썬 2.7에서 wokring입니다. 나는 tweepy 패키지를 실험 해왔다. tweepy.models.status 객체라는 객체가 있으며이 객체의 기능은 여기에 정의되어 있습니다. https://github.com/tweepy/tweepy/blob/master/tweepy/models.py.파이썬에서 객체의 구조를 보는 방법

나는이처럼 보이는 기능이 있습니다

def on_status(self, status): 
     try: 
      print status 
      return True 
     except Exception, e: 
      print >> sys.stderr, 'Encountered Exception:', e 
      pass 

내가 말하는거다 개체가 하나의 on_status 함수에서 반환 status라고합니다. print status 행을 실행하면이 내용이 화면에 출력됩니다.

tweepy.models.Status object at 0x85d32ec>

제 질문은 실제로 매우 일반적입니다. 이 status 개체의 내용을 시각적으로 인쇄하는 방법을 알고 싶습니다. 이 개체 안에 어떤 정보가 있는지 알고 싶습니다.

for i, v in status : 접근 방식을 시도했지만이 개체는 반복 가능하지 않습니다. 또한 모든 객체 속성이 함수 정의에 설명되어 있지는 않습니다.

고맙습니다. 당신은 status.__dict__.items()을 반복 할 수

+1

+1하고 즐겨 찾기. 나는 일반적으로'dir'을 사용 했었지만 이제는 mgilson의 대답이 나에게 좀 더 구체적으로 재사용 할 수있게 해줍니다. 추가하길 원한다 : Python으로 다이빙하기 (v2, 첫 번째)는 [apihelper->'info' 함수로 인트로 스펙 션] (http://www.diveintopython.net/power_of_introspection/index.html)에 관한 장을 가지고있다. 또한 구성원 등에 대한 유용한 정보와 문서 문자열의 문서를 제공합니다. – aneroid

답변

9

: 클래스가 __slots__를 사용하고 __dict__을위한 슬롯이없는 경우

for k,v in status.__dict__.items(): #same thing as `vars(status)` 
    print k,v 

은 위의 방법이 작동하지 않습니다. __slots__ 클래스는 매우 드물기 때문에 문제가되지는 않습니다.

다른 방법으로는 사용할 수 dir builtingetattr과 :

for attr in dir(status): 
    print attr, getattr(status,attr) 

이 (링크를 참조하고, __dict__가 동일한에서 고통을 것 __slots__와 클래스에 대한 작업을 수행하지만, 사용자 정의 __getattr__가 정의되어있는 경우 몇 가지 제한 사항이 있습니다 방법).

마지막으로, (예를 들어 메소드 만 원하는 경우) 실제로 볼 수있는 것을 세밀하게 제어하려는 경우 inspect module에서 일부 내용을 확인할 수 있습니다.

+0

그래서 첫 번째 제안을 시도하고이 오류가 발생했습니다 :'예외가 발생했습니다 : 압축 할 값이 너무 많습니다. '... 거대한 데이터처럼 보입니다. –

+0

두 번째 제안은 효과가있었습니다. 'attr in dir (상태)'에 대해. 감사! –

+0

@jeffery_the_wind - 죄송합니다. (내 프로그래머 오류). 'status .__ dict__'는 사전입니다. 사전에서 키/값 쌍을 반복하려면'items' 메소드가 필요합니다. 업데이트 됨. – mgilson

5

저는 항상 수동 내성을 위해 dir 내장 팬을 보았습니다. 나는 그것이 sorted(객체.__dict__.keys()) 동등하다고 생각

>>> import math 
>>> dir(math) 
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 
'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 
'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 
'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 
'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc'] 

... 모듈, 객체에서 작동합니다.

관련 문제