この質問は、 について__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そもそもなぜがフィールド名のリストをサポートしていないのか知っていますか? ただの見落とし?