#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()
вызове.