2014-07-14 2 views
4

Ruby에서 변수 (객체)를 p my_obj까지 검사 할 수 있으므로 가능하면 자세히 "자세히"인쇄합니다. 로깅 및 디버깅에 유용합니다. 파이썬에서 나는 그것이 print my_obj이라고 생각했지만, 단지 많이 인쇄하지는 않았지만, 전혀 쓸모가 없었던 <requests.sessions.Session object at 0x7febcb29b390>.변수 (객체)를 인쇄하여 검사합니다.

어떻게하면됩니까?

+0

개체 또는 코드에 대한 자세한 정보를 공유 할 수 있습니까? –

+0

이것을 사용해보십시오 :'from pprint import pprint as pp; pp (my_obj.__dict __)'(이것은 기본적으로'vars (my_obj)'가하는 것과 같습니다.) –

답변

2

이것은 객체를 "인쇄"하는 가장 보편적 인 방법입니다. 모든 객체가 매우 유용한 인쇄물을 가지는 것은 아닙니다. 실제로는 그렇지 않습니다.

다른 사람이 만든 객체로 작업하는 경우 해당 변수 및 기타 등을 보는 방법을 알아 보려면 설명서를 참조하십시오. 그것은 종종 당신에게 가장 좋은 출력을 줄 것입니다. 이 질문에 대한 다른 대답은 문서를 찾는 것보다 훨씬 빠르고 쉽게 할 수있는 객체를 검사하는보다 일반적인 방법을 제공합니다. 그들은 내가 할 수있는 한 더 얕은 검사를하지만 좋은 출발점입니다.

개체를 직접 만드는 경우 문자열을 반환하는 __str__()이라는 메서드를 정의해야합니다. 그런 다음 print obj이라고 할 때마다 해당 객체의 __str__() 함수가 호출되고 해당 문자열이 반환됩니다.

개체가 my_obj 인 경우 문서에 따라 print(my_obj.text)으로 인쇄 할 수 있습니다.

http://docs.python-requests.org/en/latest/user/advanced/

+0

Requests Session 객체가 좋은 캐치! –

+3

이 대답은 잘못이 아니지만 * 검사에 대한 OP 질문에 전혀 대답하지 않습니다. –

+1

루비도 같은 방식으로 작동합니다. 'p' 메소드는'to_s' 메소드를 호출합니다. 프로그래머가 (Object'에서) 상속받은 객체의 to_s를 덮어 쓰지 않으면 # 과 같이됩니다. Ruby가 제공하는 대부분의 (모든?) 클래스는'to_s'를 오버라이드 (override)합니다. – steenslag

2

dir() 아마 당신이 원하는 당신을 줄 것이다 : 더 많은 정보는 내가 추측 :)

+0

이것은 완전히 알려지지 않은 객체로 작업 할 때 유용합니다. 파이썬은 사전을 사용하여 이와 같은 코드를 가능하지는 않지만 읽을 수있게 만듭니다. – TheSoundDefense

-1

하는 경우가 있다면 당신은, 비록 기대하고 있다는이있다

for key in dir(my_obj): 
    print('{}: {}'.format(key, getattr(my_obj, key)) 

개체 인쇄를 완벽하게 제어하려면 클래스에 __repr____str__ 함수를 정의하십시오.

class Node(object): 
    """ A node object with an index""" 
    def __init__(self,index = 0): 
     self.index = index 

    def __repr__(self): 
     print "Node %s" % self.index 

    def __str__(self): 
     print "Node %s" % self.index 

때때로 그렇게 만 __str__을 덮어 아마 좋은 생각이다, 자세한 정보를보고 싶은 것입니다. 어쩌면

>>> import requests 
>>> r = requests.Session() 
>>> vars(r) 
{'cookies': <<class 'requests.cookies.RequestsCookieJar'>[]>, 'stream': False, 'hooks': {'response': []}, 'auth': None, 'trust_env': True, ...} 

를 얻을 수 pprint와 결합 : Difference between __str__ and __repr__ in Python

3

당신은 객체의 속성 사전을 얻을 수 vars 내장 방법을 사용할 수 있습니다 : 여기에 repr 및 STR의 차이에

좋은 세부 사항 다소 형식이 지정된 출력 :

>>> import pprint 
>>> pprint.pprint(vars(r), indent=2) 
{ 'adapters': OrderedDict([('https://', <requests.adapters.HTTPAdapter object at 0x103106690>), ('http://', <requests.adapters.HTTPAdapter object at 0x103106790>)]), 
    'auth': None, 
    'cert': None, 
    'cookies': <<class 'requests.cookies.RequestsCookieJar'>[]>, 
    ... 
2

inspect 모듈은 :

import inspect 
print inspect.getmembers(my_obj) 

이것은 __dict__ 포함뿐만 아니라 매우 유용 할 수있는 객체의 모든 방법에 대한 세부 사항을 포함한다.

관련 문제