2013-05-19 7 views
9

표준 pprint 모듈은 목록, dicts 등을 다룰 때 유용합니다. 하지만 가끔은 완전히 사용할 수 없게 사용자 정의 클래스와 :Python 3.x : 대체 pprint 구현

  • 유일한 방법은 그것을 어떤 클래스의 객체에 대한 유용한 정보를 인쇄 할 수 있도록하는 것은 __repr__을 무시하는 것입니다,하지만 내 클래스는 이미 __repr__ 수 'eval(), 좋은이 있다면 무엇 인 pprint ouput에서보고 싶은 정보가 보이지 않습니까?

  • 좋아, 나는 쓸 것이다 인쇄 지향 __repr__을하지만,이 경우는 내 수업 내부 꽤 인쇄 뭔가에 불가능하다 :

.

class Data: 
    def __init__(self): 
     self.d = {...} 

나는 꽤 인쇄 self.d 내용을, 나는 (적어도 스택 추적을 가지고 노는없이 등)을 하나의 라인 표현을 반환 할 수 없습니다. - PrettyPrinter을 무시하는 것은 옵션이 아닙니다. 같은 클래스를 예쁘게 인쇄하고 싶을 때마다하고 싶지 않습니다.

그래서 ... 사용자 정의 클래스를 예쁜 인쇄물로 만들 수있는 pprint의 대안이 있습니까? 꽤 대신의 __str__ 찾고있을 수 있습니다 인쇄 (또는뿐만 아니라) __repr__

예에 대한

+0

발견 https://pypi.python.org/pypi/pretty/0.1하지만, py2.X 인 것 같습니다. – Equidamoid

+0

"단 한 줄로 된 표현 만 반환 할 수 있습니다."- 왜 그런가요?예를 들어 NumPy는 잘 작동하는 여러 줄 repr()을 반환합니다. 다음은 파이썬 문자열로서의 예입니다 : array ([(0, 0, (0, 0, 0)), (0, 0, (0, 0, 0)), (0, 0, (0, 0, 0)), \ n (0, 0, (0, 0, 0))], \ n dtype = [('foo', 'u1'), ('bar', ' kampu

+0

@ kampu 필자는'pprint' 들여 쓰기를 깨기 때문에 여러 줄 문자열을 반환 할 수 없다는 것을 의미했습니다. – Equidamoid

답변

1

>>> import datetime 
>>> now = datetime.datetime.now() 
>>> print now 
2013-05-19 13:00:34.085383 
>>> print repr(now) 
datetime.datetime(2013, 5, 19, 13, 0, 34, 85383) 
+0

이제 datetime 대신에 여러 개의'dict'을 가진 클래스가있어서 한 터미널 행에 맞지 않는다고 상상해보십시오. 그리고 나서 당신은 여러 가지 객체로'dict'을가집니다 ... 그건 제 경우입니다. – Equidamoid

3

만족의 요구 the pretty module 경우, 당신은 파이썬 3

  1. Download와 함께 작동하도록하고 pretty.py 파일 압축을 풀 수 있습니다. 거기에
  2. 실행 2to3 :

    python -m lib2to3 -w pretty.py 
    
  3. 주석으로 다음 줄 :

    569: types.DictProxyType:  _dict_pprinter_factory('<dictproxy {', '}>'), 
    580: xrange:      _repr_pprint, 
    
  4. 이 스크립트 근처에 파일을 넣습니다. 평소와 같이

  5. 가져 오기는 :

    import pretty 
    
+0

내일 열심히 노력할 것입니다 – Equidamoid

+0

@ 캅 코드 : 성공 했습니까? – utapyngo

+0

위대한 작품! 고맙습니다! – Equidamoid

0

당신은 PrettyPrinter를 서브 클래스 오브젝트 필드의 내용을 인쇄하는 일반적인 솔루션을 만들 수 있습니다. obj.__dict__은 모든 필드 사전 obj을 제공합니다.

obj.__class__.__name__ + pformat(obj.__dict__)을 사용해도됩니다.