将文档字符串放在 Python 属性上的正确方法是啥?

Posted

技术标签:

【中文标题】将文档字符串放在 Python 属性上的正确方法是啥?【英文标题】:What is the right way to put a docstring on Python property?将文档字符串放在 Python 属性上的正确方法是什么? 【发布时间】:2013-04-08 04:11:04 【问题描述】:

我应该制作几个文档字符串,还是只制作一个(我应该把它放在哪里)?

@property
def x(self):
     return 0
@x.setter
def x(self, values):
     pass

我看到 property() 接受一个 doc 参数。

【问题讨论】:

【参考方案1】:

将文档字符串写在 getter 上,因为 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

>>>

请注意,setter 的文档字符串“Set x”将被忽略。

因此,您应该在 getter 函数上编写整个属性(getter 和 setter)的文档字符串,以使其可见。一个好的属性文档字符串的例子可能是:

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()

【讨论】:

setter 必须记录在 getter 中

以上是关于将文档字符串放在 Python 属性上的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

有啥理由将代码放在 Python 中的文档字符串之前?

将多行放在 Javadoc 的参数标记中的正确方法是啥?

Mac OS X 上的 Boost.Python:“TypeError:属性名称必须是字符串”

将数据属性放在 DataTables 1.10 上的行上

python面试题总结

从 NSDate 到 NSString 的转换,属性上的核心数据迁移未正确显示字符串