此問題旨在更多地關於__dir__
而不是約numpy
。覆蓋python中__dir__方法的正確方法
我有numpy.recarray
(在Python 2.7,numpy的1.6.2)一個子類,我注意到recarray
時dir
荷蘭國際集團的對象(因此IPython中的自動完成不工作)的字段名稱未列出。
試圖修復它,我想在我的子類覆蓋__dir__
,像這樣:
def __dir__(self):
return sorted(set(
super(MyRecArray, self).__dir__() + \
self.__dict__.keys() + self.dtype.fields.keys()))
導致用:AttributeError: 'super' object has no attribute '__dir__'
。 (我發現here這應該在Python 3.3的實際工作...)
作爲一種變通方法,我想:
def __dir__(self):
return sorted(set(
dir(type(self)) + \
self.__dict__.keys() + self.dtype.fields.keys()))
據我所知,這一個工作,但當然不是作爲優雅。
問題:
- 是後者的解決方案在我的情況是正確的,即對於
recarray
一個子類? - 有沒有辦法讓它在一般情況下工作?在我看來,它不適用於多繼承(打破
super
-呼叫鏈),當然,對於沒有__dict__
的對象... - 你知道爲什麼
recarray
不支持列出其字段名稱以開始用?僅僅是疏忽?
我試圖子類'recarray'和'dir' ** **不顯示'recarray'屬性。你能解釋一下你認爲錯過了什麼嗎? – Bakuriu 2013-03-19 19:35:19
'self.dtype.fields.keys()' – shx2 2013-03-20 14:48:09