Строка документа свойства Python выводит справку только для всего класса

#python #python-2.7 #properties #docstring

#python #python-2.7 #свойства #строка документа

Вопрос:

Я пытаюсь задокументировать @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 нет.

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

Комментарии:

1. cwp.str_obj является результатом вызова средства получения, _str_obj , а не самого метода получения. В этом смысл использования свойства.

Ответ №1:

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

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

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

 help(type(cwr).str_obj)
  

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

 help(ClassWithStringProperty.str_obj)
  

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