这个问题的意思是__dir__
比 about更多numpy
。
我有一个numpy.recarray
(在 python 2.7,numpy 1.6.2 中)的子类,并且我注意到ing 对象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__'
。(我在这里发现这实际上应该在 python 3.3 中工作......)
作为一种解决方法,我尝试了:
def __dir__(self):
return sorted(set(
dir(type(self)) + \
self.__dict__.keys() + self.dtype.fields.keys()))
据我所知,这个工作,但当然,不是那么优雅。
问题:
- 在我的情况下,后一种解决方案是否正确,即对于
recarray
? - 有没有办法让它在一般情况下工作?在我看来,它不适用于多重继承(打破
super
-call 链),当然,对于没有__dict__
...的对象 - 你知道为什么
recarray
不支持列出它的字段名开头吗?仅仅是疏忽?