【问题标题】:Add docstring to a namedtuple field将文档字符串添加到命名元组字段
【发布时间】:2016-07-23 00:25:31
【问题描述】:

我知道可以通过子类化来为命名元组添加文档字符串,例如

from collections import namedtuple
NT = namedtuple('NT', ['f1', 'f2', 'f3'])
class NTWithDoc(NT):
    """ DOCSTRING """
    __slots__ = ()

现在我希望为 f1、f2 和 f3 添加文档字符串。有没有办法做到这一点?我们公司用的是Python2,别以为别人让我用3。

【问题讨论】:

  • 注意,您不需要在该代码中使用pass :-)
  • 无论如何你使用的是 py 2 还是 py 3
  • this topic 能解决问题吗?
  • @alecxe -- 我在那里看不到。这基本上是 OP 已经知道的......

标签: python namedtuple


【解决方案1】:

我不确定是否有在 python2.x 上执行此操作的好方法。在python3.x上,你可以直接换掉__doc__

$ python3
Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from collections import namedtuple
>>> NT = namedtuple('NT', ['f1', 'f2', 'f3'])
>>> NT.f1.__doc__
'Alias for field number 0'
>>> NT.f1.__doc__ = 'Hello'

不幸的是,python2.x 在这一点上给你一个错误:

>>> NT.f1.__doc__ = 'Hello World.'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: readonly attribute

在python2.x上,你可以通过重新定义所有属性来获得它:

>>> from collections import namedtuple
>>> NT = namedtuple('NT', ['f1', 'f2', 'f3'])
>>> class NTWithDoc(NT):
...     """docstring."""
...     __slots__ = ()
...     f1 = property(NT.f1.fget, None, None, 'docstring!')
... 
>>> help(NTWithDoc)

>>> a = NTWithDoc(1, 2, 3)
>>> a.f1
1

但是去获取文档字符串感觉很麻烦:-)。

【讨论】:

  • 这就是我问的原因......忘了提到Python版本是2。
  • @xis -- 我添加了一个 python2.x 变体(我在下班回家的路上想到了它)。
猜你喜欢
  • 2010-12-09
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-06
  • 1970-01-01
相关资源
最近更新 更多