Может ли pydoc/help() скрыть документацию для унаследованных методов и атрибутов класса?

При объявлении класса, который наследуется от определенного класса:

class C(dict):
    added_attribute = 0

документация для класса C перечисляет все методы dict (либо через help(C) или же pydoc).

Есть ли способ скрыть унаследованные методы от автоматически сгенерированной документации (строка документации может ссылаться на базовый класс, для не перезаписанных методов)? или это невозможно?

Это было бы полезно: pydoc перечисляет функции, определенные в модуле после его классов. Таким образом, когда у классов очень длинная документация, перед представлением новых функций, предоставляемых модулем, выводится много менее полезной информации, что затрудняет использование документации (необходимо пропустить всю документацию для унаследованных методов пока вы не достигнете чего-то определенного для документируемого модуля).

3 ответа

Решение

pydoc и help встроенные функции не поддерживают это, но нет причин, по которым вы не могли бы написать свой собственный инструмент (возможно, путем изменения исходного кода pydoc), который бы обладал желаемым поведением. Просто пройдитесь по классам, чтобы получить локально определенные атрибуты, а затем ищите вещи, которые имеют doc в качестве атрибута.

У меня была та же проблема, и я решил ее на Python 2.7.6 для Windows (x86), добавив 3 строки в pydoc.py. Инструкции:

  1. сделайте свою собственную копию lib\pydoc.py
  2. найти все случаи inheritedпеременную (3 раза, на мой счет) в файле и установите его в пустой список сразу после его определения. Например, я получил строку 809:

    attrs, унаследованный = _split_list(attrs, lambda t: t[2] это класс)

и написал inherited = [] на новой строке под ним.

Теперь он больше не печатает унаследованные методы.

Вы можете дать своему классу метакласс с помощью специального метода. __dir__ который возвращает свой собственный список атрибутов. Пидок будет использовать этот список.

Заметки:

  • это также повлияет на поведение dir(),
  • известно, что в редких случаях использование метаклассов открывает портал в адское измерение.
Другие вопросы по тегам