重写__dir__方法的正确方法是什么?
这个问题应该__dir__
比关于更多numpy
。
我有一个子类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__'
。(我发现这里实际上应该在python 3.3中工作…)
作为一种解决方法,我尝试了:
def __dir__(self):
return sorted(set(
dir(type(self)) + \
self.__dict__.keys() + self.dtype.fields.keys()))
据我所知,这是可行的,但当然并不优雅。
问题:
- 后一种解决方案对我而言是否正确,即对于的子类
recarray
? - 有没有办法使它在一般情况下起作用?在我看来,它不能用于多重继承(打断
super
-call链),当然,对于没有__dict__
… - 您知道为什么
recarray
不支持列出其字段名称开头吗?仅仅是监督?