【发布时间】:2011-03-04 08:02:17
【问题描述】:
我正在编写一个轻量级类,其属性旨在公开访问,并且仅在特定实例化中有时会被覆盖。就此而言,Python 语言中没有为类属性或任何类型的属性创建文档字符串的规定。记录这些属性的预期和支持方式是什么?目前我正在做这样的事情:
class Albatross(object):
"""A bird with a flight speed exceeding that of an unladen swallow.
Attributes:
"""
flight_speed = 691
__doc__ += """
flight_speed (691)
The maximum speed that such a bird can attain.
"""
nesting_grounds = "Raymond Luxury-Yacht"
__doc__ += """
nesting_grounds ("Raymond Luxury-Yacht")
The locale where these birds congregate to reproduce.
"""
def __init__(self, **keyargs):
"""Initialize the Albatross from the keyword arguments."""
self.__dict__.update(keyargs)
这将导致类的文档字符串包含初始标准文档字符串部分,以及通过对__doc__ 的扩充分配为每个属性添加的行。
虽然docstring style guidelines 中似乎没有明确禁止这种风格,但也没有提到它作为一个选项。这里的优点是它提供了一种在属性定义旁边记录属性的方法,同时仍然创建一个可展示的类文档字符串,并避免编写重复来自文档字符串的信息的 cmets。我仍然有点恼火,我实际上必须写两次属性;我正在考虑使用 docstring 中值的字符串表示形式,至少可以避免默认值的重复。
这是否严重违反了临时社区公约?没事吧?有没有更好的办法?例如,可以创建一个包含属性值和文档字符串的字典,然后将内容添加到类__dict__ 和类声明末尾的文档字符串;这将减少两次键入属性名称和值的需要。 编辑:我认为最后一个想法实际上是不可能的,至少在没有从数据动态构建整个类的情况下是不可能的,这似乎是一个非常糟糕的想法,除非有其他理由这样做。
我对python还很陌生,还在研究编码风格的细节,所以也欢迎无关的批评。
【问题讨论】:
-
如果您正在寻找一种记录 Django 模型属性的方法,这可能会有所帮助:djangosnippets.org/snippets/2533
-
How to document fields and properties in Python? 的副本,其中包含不同的解决方案。
-
我不明白为什么这是基于意见的。 Python 专门记录了它在 PEP 中可接受的约定。有不同的 Python 源工具可以提取格式正确的文档。事实上,Python 实际上有一个PEP 257 中提到的
attribute doc string,它并不为人所知,似乎很难找到它可以回答 OPs 的问题,并且得到一些源工具的支持。这不是意见。这是事实,也是语言的一部分,几乎正是 OP 想要的。
标签: python class documentation docstring class-attributes