현재의 모든 객체의 속성 및 값프로필 인쇄하려면 내장현 기능이 있나요?

그래서 뭐, 그런 식으로 뭔가를 찾고 PHP& I& # 39 m, s print_r # 39 이것은 함수. 이거 정말 내가 할 수 있는 객체의 상태를 보고 내 스크립트에만 디버그로 what& # 39 에 의해 질문이예요

'함께': ' ()' 은 운영까지도 pprint ()

from pprint import pprint
pprint(vars(your_object))
해설 (7)
해결책

당신은 정말 함께 섞어 두 개의 서로 다른 전지전능하심이라

['디렉터 ()'] 사용하여 (https://docs.python.org/3/library/functions.html # dir), [' () 은'] (https://docs.python.org/3/library/functions.html #) 은 또는 ['조사'] (https://docs.python.org/3/library/inspect.html) 모듈에서는 afaq 관심이 모아지고 있다 (예를 들어, '내가 사용하는' builtins 너희는너희가 대신 모든 객체를 사용할 수 있습니다).

>>> l = dir(__builtins__)
>>> d = __builtins__.__dict__

그러나 그 사전 인쇄하십시오 돌림무늬 좋아해요.

>>> print l
['ArithmeticError', 'AssertionError', 'AttributeError',...

또는

>>> from pprint import pprint
>>> pprint(l)
['ArithmeticError',
 'AssertionError',
 'AttributeError',
 'BaseException',
 'DeprecationWarning',
...

>>> pprint(d, indent=2)
{ 'ArithmeticError': ,
  'AssertionError': ,
  'AttributeError': ,
...
  '_': [ 'ArithmeticError',
         'AssertionError',
         'AttributeError',
         'BaseException',
         'DeprecationWarning',
...

예쁜 인쇄면이 대화형 디버거 명령으로 에서도 사용할 수 있습니다.

(Pdb) pp vars()
{'__builtins__': {'ArithmeticError': ,
                  'AssertionError': ,
                  'AttributeError': ,
                  'BaseException': ,
                  'BufferError': ,
                  ...
                  'zip': },
 '__file__': 'pass.py',
 '__name__': '__main__'}
해설 (8)
def dump(obj):
  for attr in dir(obj):
    print("obj.%s = %r" % (attr, getattr(obj, attr)))

그 밖에 여러 가지 3rd party 같은 기능을 추가, 예외 처리, 국가 / 특별광고에 인쇄면이 레커싱 네스트된 객체에는 # 39 에 따르면, 그들의 authors& 등의 문자 환경 설정. 그러나 기본적으로 이 모든 항목으로 요약됩니다.

해설 (11)

39 언급한 적이 있지만, ll 겨우 dir that& attributes& # 39 있습니다. 이름. 그들의 값도 스케쳐내 시도하시겠습니까 __dict_.

class O:
   def __init__ (self):
      self.value = 3

o = O()

다음은 출력:

>>> o.__dict__

{'value': 3}
해설 (1)

디렉터 (), &quot &quot 사용할 수 있습니다. 함수은 이 작업을 수행할 수 있습니다.

>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__stdin__', '__stdo
t__', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder
, 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'exc_clear', 'exc_info'
 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval', 'getdefault
ncoding', 'getfilesystemencoding', 'getrecursionlimit', 'getrefcount', 'getwindowsversion', 'he
version', 'maxint', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_
ache', 'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setprofile', 'setrecursionlimit
, 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoption
', 'winver']
>>>

또 다른 유용한 기능은 움말.

>>> help(sys)
Help on built-in module sys:

NAME
    sys

FILE
    (built-in)

MODULE DOCS
    http://www.python.org/doc/current/lib/module-sys.html

DESCRIPTION
    This module provides access to some objects used or maintained by the
    interpreter and to functions that interact strongly with the interpreter.

    Dynamic objects:

    argv -- command line arguments; argv[0] is the script pathname if known
해설 (0)

현재 상태를 객체에는 인쇄하려면 수 있습니다.

>>> obj # in an interpreter

또는

print repr(obj) # in a script

또는

print obj

'방법' 또는 '정의' str 단축시킵니다 클래스뿐만 repr. [파이썬 문서용으로] 에서 1:

&gt. 'repr (self)' 에서 '라는 레프라 내장현 ()' 에서 문자열 함수 &gt. 변환에는 (역동기화 인용) 를 &gt. 계산을 &quot official"; 문자열 &gt. 표현한 객체. 만약 전혀 &gt. 이 같은 가능성을 고려해야 합니다 &gt. 파이썬 표현식에서는 사용할 수 있는 &gt. 함께 사용하여 객체를 재생성합니다. &gt. (적절한 때 동일한 값을 &gt. 환경). 이 경우 수 없습니다. &gt. 형태의 &lt 이섬 유용한 문자열으로 "; &gt. description.&gt "; 귀의하노라 합니다. &gt. 반환 값은 문자열이어야 합니다 &gt. 객체에는. 만약 a 클래스 eventtest repr () &gt. 다음 () '가 아닌' () ',' repr str &gt. 또한, 한 때 사용되는 &quot informal&quot. 문자열 &gt. 그 표현 인스턴스들도 &gt. 클래스가 필요합니다. 이는 일반적으로 &gt. 도왔으매 디버깅에 사용되는 것이 중요합니다. &gt. 그 표현이 &gt. 풍부한 정보 및 명백한.

&gt. 'str (self)' 에서 '라는 str ()' 에서 내장 기능 및 인쇄 &gt. 기술서임을 계산하기 informal&quot "; &gt. 구체화하십시오 표현한 객체. &gt. Repr () '이' 이 다릅니다. &gt. 유효한 파이썬 필요는 없습니다 &gt. 표현식에서는: 보다 편리한 또는 &gt. 간결한 표현을 사용할 수 있습니다. &gt. 대신. 반환 값을 지정해야 합니다. &gt. string 객체에.

해설 (1)

체크아웃하기 형성할 수도 있다.

https://stackoverflow.com/questions/2540567/is-there-a-python-equivalent-to-perls-datadumper

내 권장안을 로만스였나 -

https://gist.github.com/1071857

참고로 가지고 있는 데이터를 다시 펄 펄 모듈 호출됨 데이터 덤퍼 구체화합니다 객체에는 소스 코드 (참고: 사용하지 않기 때문에 변환하기에 코드를 다시 소스로, 거의 항상 don& 있습니다 싶지 않다, 객체에는 메서드로부터 # 39 의 함수 출력). 그러나 일반 목적의 디버깅하지 대한 지속성을 위해 사용될 수 있습니다.

특히 여러 가지 못하는 것을 보고 그냥 정지점으로 표준 파이썬 pprint 이룰 때 사용하면 내림차순을 인스턴스입니다 내부 hex 포인터입니다 객체와 객체 (에르 포인터입니다 사용할 수 있는 것은, 전체적으로 많은 운행에서어떠한). 그래서 간단히 말해서, python 은 객체 지향 패러다임에 관한 모든 필요한 도구가 있지만, 이 거대한 상자의 나가버렷 협력을 위해 설계됩니다 이외의 다른 객체.

펄 데이터 덤퍼 제어할 수 있습니다, 또한 얼마나 깊은 갈래 사용순환 탐지합니다 링크됨 구조 (that& # 39 의 정말 중요한). 이 과정은 쉽게 얻을 수 있기 때문에 근본적으로 perl 로 객체에는 이외에 별다른 매직 축복을 () 는 전 세계 어디서나 잘 정의된 프로세스).

해설 (4)

대부분의 경우, '정보' 가 '또는' 디렉터 () 를 사용하여 dict you& 있습니다 # 39, re 하늘과 땅 차이다. 자세한 내용은 필요로 하는 문제가 발생할 경우, 표준 라이브러리 dm_ownerdm_owner 직접 모듈에서는 수 있는 양을 좀 인상적이군 상세함을. 실제 누게스테스 일부 정보를 다음과 같습니다.

  • 이름을 매개변수입니다 함수 및 방법
  • 클래스 계층 구조
  • 소스 코드를 구현 클래스를 객체에는 기능 /
  • 지역 변수를 프레임 객체에는 아웃해야

39 you& 좀 찾고 있는데, 어떤 경우, re &quot 속성 값을 가지고 있습니까? ',' 디렉터 () '와' dict 객체에는 &quot 관심용 충분하나니 것입니다. # 39 you& 경우 현재 상태를 자세히 알고 싶다면, re 상행담관염이라고 하는 임의의 객체 (object 는 파이썬 거의 모든 것을 염두에 두고 있는) 한 후, '검사' 는 오랜 방안을 적극 검토 중이다.

해설 (1)

한 메타 프로그래밍 예 덤프하지 객체에는 함께 매직:

&lt pre>; $ cat dump.py &lt /pre>;

/usr/bin/python!

import sys
if len(sys.argv) > 2:
    module, metaklass  = sys.argv[1:3]
    m = __import__(module, globals(), locals(), [metaklass])
    __metaclass__ = getattr(m, metaklass)

class Data:
    def __init__(self):
        self.num = 38
        self.lst = ['a','b','c']
        self.str = 'spam'
    dumps   = lambda self: repr(self)
    __str__ = lambda self: self.dumps()

data = Data()
print data

인수가 없는.

&lt pre>; $ 파이썬 dump.py &lt /pre>; &lt main.Data 인스턴스입니다 dell. 0x00A052D8>;

2 와 [과 유틸리티인]: &lt pre>; $ 뇨시.매직 메타스믈피클러 파이썬 dump.py &lt /pre>; ,, xml 버전을 = &quot 1.0&quot &gt &lt?? doctype 프로비치 &lt PyObjects.dtd&quot &quot, 시스템, >;! = &quot main&quot 프로비치 모듈에서는 <;; class = &quot Data"; id = &quot 11038416&quot >;; attr name = &quot lst&quot <;; type = &quot list"; id = &quot 11196136"; &gt. 항목 유형 = &quot string&quot <;; 값 = &quot a"; /&gt. 항목 유형 = &quot string&quot <;; 값 = &quot b"; /&gt. 항목 유형 = &quot string&quot <;; 값 = &quot c"; /&gt. &lt /attr>; attr name = &quot num&quot <;; type = &quot numeric"; 값 = &quot 38"; /&gt. attr name = &quot str&quot <;; type = &quot string"; 값 = &quot spam"; /&gt. &lt /PyObject>;

그래도 조금 오래된 것은 작업 중.

해설 (0)

내가 (your_object) '' 도움말에서는 사용하는 것이 좋습니다.

'도움말에서는 (dir)'

&gt. 이름 없는 경우, 현재 내시경이요 반품하십시오 불렀으매 인수 &gt. (일부) 등 다른 이름들을 사전순으로 돌아올 수 있는 속성 &gt. 주어진 객체에는 속성 및 에서 접속할 수 있습니다. &gt. 만약 객체가 물품요 메서드입니다 release. dir, 사용됩니다. 그렇지 않으면 &gt. 기본값입니다 되돌려줍니다 디렉터 () 이 사용되고 있다. &gt. kingdome. seattle. 모듈에서는 객체에는: 이 module& # 39 의 속성. &gt. 클래스에 대한 객체에는: 속성 및 재귀적으로 특성이 있다. &gt. 기지 있다. &gt. 다른 객체. # 39 의 속성 및 class& 속성이 있다. &gt. # 39 의 기반 클래스, 속성 재귀적으로 class& 있다.

'도움말에서는 () 은'

&gt. 인수가 없는 해당하는 지역 (). &gt. 인수를 통해 해당하는 object.dict.

해설 (0)

이 모든 내용을 재귀적으로 를출력합니다 객체에는 json 으로 또는 yaml 밀어맞춤된 형식:

import jsonpickle # pip install jsonpickle
import json
import yaml # pip install pyyaml

serialized = jsonpickle.encode(obj, max_depth=2) # max_depth is optional
print json.dumps(json.loads(serialized), indent=4)
print yaml.dump(yaml.load(serialized), indent=4)
해설 (0)
from pprint import pprint

def print_r(the_object):
    print ("CLASS: ", the_object.__class__.__name__, " (BASE CLASS: ", the_object.__class__.__bases__,")")
    pprint(vars(the_object))
해설 (0)

39 의 경우, 이를 통해 you& re 디버깅하지, 방금 로렌아줌마가 반복 실행해도 수락됨 만족시키지 않는 이유는, 모든 것을 이미 해당 클래스를 '좋은' str 구현이 필요하기 때문입니다. # 39 의 경우 that& 아닌 경우, 이 작품은 내가 긁어줄게:

import json
print(json.dumps(YOUR_OBJECT, 
                 default=lambda obj: vars(obj),
                 indent=1))
해설 (3)

종료기 프레티

from ppretty import ppretty

class A(object):
    s = 5

    def __init__(self):
        self._p = 8

    @property
    def foo(self):
        return range(10)

print ppretty(A(), show_protected=True, show_static=True, show_properties=True)

출력:

__main__.A(_p = 8, foo = [0, 1, ..., 8, 9], s = 5)
해설 (0)

39 만 언급하고 있는 대답, ve 업보테드 i& pprint. 값을 명확히 스케쳐내 모두 볼 수 있는 복잡한 데이터 구조, 다음과 같은 항목을 재동기화할

from pprint import pprint
pprint(my_var)

여기서 my_var 는 변수를 관심을 모으고 있다. 난 '때 사용되는 pprint (var (my_var)' t help 멘붕이야 및 기타 여기에 대답을 didn& # 39, 또는 메서드로부터 불필요하게 긴 보였다. 그나저나 내 특정 경우 코드 I was a dictionary of 사전 조사하고 있었다.

그냥 끝날 수 있는 가치가 있는 것 아니냐는 지적도 일부 사용자 정의 클래스 ',' http://support. 0x7f739267f400&gt 섬롭ject.렉amp리클레스 객체에는 &lt 도움이되지 않는, 그런 출력입니다. 이 경우, 할 수 있습니다 'a' str 구현하십시오 방법, 또는 다른 몇몇 시도하시겠습니까 솔루션뀉뀉뀉뀉. # 39; d 아직도 찾을 수 있는 단순한 사안이 작동됨 i& 없이 모든 경우에 제 3 자 라이브러리보다는.

해설 (1)

내가 필요로 하는 것은, 이 때문에 일부 로깅합니다 인쇄하려면 디버그 정보를 사용할 수 없는 pprint 될 것 "이라며" break it. 대신 내가 알아서 이런게야 사실상 같은 것입니다.

DO = DemoObject()

itemDir = DO.__dict__

for i in itemDir:
    print '{0}  :  {1}'.format(i, itemDir[i])
해설 (0)

Myobject&quot 덤프하기 위한 ";:

from bson import json_util
import json

print(json.dumps(myObject, default=json_util.default, sort_keys=True, indent=4, separators=(',', ': ')))

전화했는데 var () 및 디렉터리 (); 내가 찾던 뭐하러요 모두 실패했다. # 39 didn& var (), t, t %s/dbase/exttable. _dict didn& 때문에 작동합니까 객체에는 # 39 (렉스티론스트리피에로: 인수 () 은 있어야 _dict_ 속성). # 39 wasn& 디렉터 (), t 내가 찾고 있었습니다. # 39 의 그냥 열거합니다 it& 필드 이름 값을 t give, doesn& # 39, 또는 객체 구조.

내 생각엔 제슨윈덤프스 () 를 사용할 수 없는 객체에는 대부분 기본 = json_util.default 하지만 난 그 당시 datetime 필드에 객체에는 표준 json 시리얼 못했습니다. Https://stackoverflow.com/questions/11875770/how-to-overcome-datetime-datetime-not-json-serializable-in-python 참조

해설 (2)

왜 간단한 일이 아니다.

for key,value in obj.__dict__.iteritems():
    print key,value
해설 (1)

그냥 종료기 [비프린트] (https://github.com/panyanyany/beeprint).

하지만 아름다운 출력입니다 인쇄면이 아니라 개체 변수가 아니라 함께 도움이 된다 (예:

class(NormalClassNewStyle):
  dicts: {
  },
  lists: [],
  static_props: 1,
  tupl: (1, 2)
해설 (1)

[pprint] [1] 가 제작을 위한 적절한 표현 "pretty" 프린터 미학적으로 고객의 데이터 구조. 이 표현은 구문 분석 데이터를 얻을 수 있는 구조를 포맷터 기준으로 올바르게 인터프리터는 있으며, 또한 인간이 쉽게 읽을 수 있습니다. 한 줄로 보관할 경우 출력이 가능하며 여러 밀어맞춤된 분할할 때 발생한다.

[1]: http://www.doughellmann.com/PyMOTW/pprint/ # 모듈에서는 pprint

해설 (0)