Свойство docstring Python выводит только справку для всего класса - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь задокументировать @property в модуле python и не могу отобразить строку документации в справке по свойству.Я хотел бы позвонить по номеру help(class.property), чтобы распечатать справку только для этого свойства.

Вот пример:

class ClassWithStringProperty(object):
    def __init__(self):
        self._str_obj = "'{0:02d}, {1}'.format(thingy['number'], thingy['description']"

    @property
    def str_obj(self):
        """
        A configurable formatting string that is eval()'ed for data export
        """
        return self._str_obj

    @str_obj.setter
    def str_obj(self, str_obj):
        self._str_obj = str_obj

Когда я импортирую и пытаюсь получить помощь, он работает навесь класс, но не на отдельном свойстве:

In [1]: from property_docstring import ClassWithStringProperty
In [2]: cwp = ClassWithStringProperty()
In [4]: help(cwp)
Help on ClassWithStringProperty in module property_docstring object:

class ClassWithStringProperty(__builtin__.object)  
 |  Methods defined here:
 |
 |  __init__(self)
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |
 |  __dict__
 |      dictionary for instance variables (if defined)
 |
 |  __weakref__
 |      list of weak references to the object (if defined)
 |
 |  str_obj
 |      A configurable formatting string that is eval()'ed for data export

In [5]: help(cwp.str_obj)
no Python documentation found for "'{0:02d}, {1}'.format(thingy['number'], thingy['description']"

Как видно из вывода In [4], строка документа печатается в str_obj, но в In [5] говорится, что документации Python нет.

Как я могу разрешить доступ к документации свойства @ самостоятельно, не перечисляя документы всего класса?

1 Ответ

0 голосов
/ 06 марта 2019

Вы обращаетесь к атрибуту в экземпляре, в результате чего метод получения вызывается , а результат передается функции help().Значение, которое вернул получатель, не имеет строки документации.

Обратите внимание, что здесь вы на самом деле не используете help(class.property), вы используете help(<em><strong>instance</strong></em>.property).

Вам нужно обратиться за помощью ккласс вместо этого;если у вас есть только экземпляр, используйте type(), чтобы указать класс:

help(type(cwr).str_obj)

или, если у вас уже есть класс, обратитесь за помощью к классу:

help(ClassWithStringProperty.str_obj)

help(instance) автоматически обнаруживает, что у вас есть экземпляр, и дает вам помощь по классу, но этого нельзя сделать для результатов свойств, связь с экземпляром (и, следовательно, с классом) исчезает, когда help()называется.

...