2
我正在嘗試IPython與我創建的模塊,它不顯示類對象的實際表示形式。相反,它表明類似類的IPython表示
TheClass.__module__ + '.' + TheClass.__name__
我巨資在該模塊中使用元類和我有什麼意義類表示應顯示給用戶。
是否有一個IPython特定的方法,我可以改變,使正確的表示可用,而不是這個名字空間thingy,這是在這個應用程序中是無用的嗎?或者,如果這是不可能的,我如何定製我的IPython版本來顯示我想要的信息?
EDIT
作爲補充信息,如果我得到一個類和改變__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
(元類的父親)與此功能。
EDIT 2
事情我想:
- 添加
_repr_pretty_
函數元類。它可以與實例協同工作,但不適用於類... - 使用此功能
IPython.lib.pretty
.for_type(typ, func)
。它只會改變上面寫到的大字典,而不會改變RepresentationPrinter
實例的副本......所以這個函數根本沒有用處?! - 調用魔術功能
%pprint
。它禁用(或啓用)這個漂亮的打印功能,對所有對象使用默認的Python__repr__
。這很糟糕,因爲漂亮的列表,字典和其他許多人都很好。
第一種方法更多的是我想要的,因爲它不會影響環境並且是特定於此類的。
你是什麼意思的「代表」?你的意思是你的班上有一個'__repr__',它沒有被調用? – BrenBarn
@BrenBarn:[在元類上](http:// stackoverflow。com/q/4932438/20862) –
@BrenBarn我在**元類**中有一個'__repr__',它並不像普通的Python shell那樣叫它 – JBernardo