【发布时间】:2013-03-08 14:53:53
【问题描述】:
这个问题更多的是关于__dir__,而不是numpy。
我有一个numpy.recarray 的子类(在python 2.7 中,numpy 1.6.2),我注意到recarray 的字段名称在diring 对象时没有列出(因此 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-call 链),当然,对于没有__dict__的对象... - 你知道为什么
recarray不支持列出它的字段名开头吗?仅仅是疏忽?
【问题讨论】:
-
我试图继承
recarray和dir确实显示recarray属性。你能解释一下你认为缺少什么吗? -
self.dtype.fields.keys()
标签: python inheritance python-2.7 introspection