此问题旨在更多地关于__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