내가 만든 모듈로 IPython을 시도했지만 클래스 객체의 실제 표현이 표시되지 않습니다. 대신 내가 클래스의 IPython 표현
TheClass.__module__ + '.' + TheClass.__name__
같은 것을 보여줍니다 크게 사용이 모듈에서 메타 클래스와 I가 사용자에게 표시해야 정말 의미있는 수준의 표현이있다.
이 응용 프로그램에서는이 네임 스페이스 대신 올바른 표현을 사용할 수 있도록 IPython 전용 메서드를 사용할 수 있습니까?
그렇지 않은 경우 원하는 정보를 표시하도록 IPython의 버전을 사용자 정의 할 수 있습니까?
내가 클래스를 얻고 __module__
속성을 변경하는 경우 편집이
보완 정보, 예를 들어하기 그래서 내 기대를 잘했고,이 기능이 클래스 객체 표시하는 데 사용됩니다
Traceback (most recent call last):
... [Huge traceback] ...
File "C:\Python32\lib\site-packages\IPython\lib\pretty.py", line 599, in _type_pprint
name = obj.__module__ + '.' + obj.__name__
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
: 나는 내 수업에 사용자 정의 시도
def _type_pprint(obj, p, cycle):
을 표현을 표시 할 때 없음,이 역 추적으로 불어 없다 하지만 내가 제대로하고 있다고 생각하지 않습니다. 이 모듈 IPython.lib.pretty
에는 type
(메타 클래스의 부모)을이 함수와 연결하는 큰 사전이 있습니다.
편집 2
것들 내가 시도 :
- 이 메타 클래스 수있는
_repr_pretty_
기능을 추가. 인스턴스와 함께 작동하지만 클래스에서는 작동하지 않습니다. - 이 함수의 사용
IPython.lib.pretty
.for_type(typ, func)
. 그것은 단지 위의 쓴 큰 사전을 변경하지만RepresentationPrinter
인스턴스에 의해 만들어진 복사본이 아닙니다 ... 그래서이 함수는 전혀 사용하지 않습니다! - 마법 기능 호출
%pprint
. 모든 객체에 대해 기본 파이썬__repr__
을 사용하여이 예쁜 인쇄 기능을 비활성화 (또는 활성화)합니다. 그것은 목록, dict 및 많은 다른 것들이 꽤 멋지 기 때문에 좋지 않습니다.
첫 번째 방법은 환경에 영향을주지 않으며이 클래스에만 적용되므로 내가 원하는 것보다 많습니다.
"표현"이란 무엇입니까? 수업 중에'__repr__'을 (를) 가지며 호출되지 않는다는 것을 의미합니까? – BrenBarn
@BrenBarn : [메타 클래스에서.] (http : // stackoverflow.com/q/4932438/20862) –
@BrenBarn ** 메타 클래스 **에'__repr__'이 있는데 일반적인 파이썬 쉘처럼 호출하지 않습니다 – JBernardo