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

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

class C(dict):
    added_attribute = 0

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

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

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

Ответы [ 3 ]

1 голос
/ 12 июня 2012

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

Примечания:

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

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

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

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

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

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

1 голос
/ 12 августа 2010

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

...