Этот вопрос должен быть больше о __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
не поддерживает перечисление имен полей для начала? простой надзор?