2013-04-15 1 views

ответ

26

Напишите docstring на геттере, потому что 1) вот что такое help(MyClass) показывает, и 2) это также как это делается в Python docs -- see the x.setter example.

Что касается 1):

class C(object): 
    @property 
    def x(self): 
     """Get x""" 
     return getattr(self, '_x', 42) 

    @x.setter 
    def x(self, value): 
     """Set x""" 
     self._x = value 

И потом:

>>> c = C() 
>>> help(c) 
Help on C in module __main__ object: 

class C(__builtin__.object) 
| Data descriptors defined here: 
| 
| __dict__ 
|  dictionary for instance variables (if defined) 
| 
| __weakref__ 
|  list of weak references to the object (if defined) 
| 
| x 
|  Get x 

>>> 

Обратите внимание, что строка документации сеттер в "Set х" игнорируется.

Значит, вы должны написать docstring для всего свойства (getter и setter) в функции getter, чтобы оно было видимым. Примером хорошего имущества может строку документации быть:

class Serial(object): 
    @property 
    def baudrate(self): 
     """Get or set the current baudrate. Setting the baudrate to a new value 
     will reconfigure the serial port automatically. 
     """ 
     return self._baudrate 

    @baudrate.setter 
    def baudrate(self, value): 
     if self._baudrate != value: 
      self._baudrate = value 
      self._reconfigure_port() 
+1

Ницца, пример прямо в документации Python. –

+0

установщик должен быть задокументирован в геттере –

0

Часто свойствам не требуется docstring, их поведение должно быть само собой разумеющимся.

Но если вам действительно нужно поставить docstring, поместите его на геттер. Если вы поместите один на оба, один из сеттера будет проигнорирован pydoc в любом случае.

Если вы, например, делаете некоторые проверки в своей заданной операции и, возможно, выбрасываете исключение, то это будет хороший резонанс, чтобы поставить документацию для документирования этого поведения. Но просто что-то вроде «set/получает значение spam», поскольку docstring абсолютно бесполезен.

+2

Может быть, стоит отметить, что 'property' встроенной функции есть' параметр doc', который можно использовать для установки объекта строка документации свойства. Если он не задан (и не будет, если вы используете 'property' в качестве декоратора), будет использоваться docstring геттера. – Blckknght

+0

Это применяется только в том случае, если вы используете 'свойство' как функцию, а не как декоратор. В таком случае это единственная возможность поставить докшрин для свойства в любом случае. – mata

+8

Я не согласен с тем, что «обычно свойствам не нужна никакая докшрина». Для публичного API свойства не более понятны, чем атрибуты или методы. Да, свойства (и атрибуты и функции) всегда должны иметь понятные имена, но важна хорошая документация по API. –

Смежные вопросы