この質問は、 について__dir__
よりも多くのことを意図しています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
ですか? - 一般的なケースで機能させる方法はありますか?多重継承 (-call チェーンを壊す) では機能しないように思えます。
super
もちろん、オブジェクトの場合は__dict__
... recarray
そもそもなぜがフィールド名のリストをサポートしていないのか知っていますか? ただの見落とし?