将docstring添加到namedtuple字段

时间:2016-07-23 00:25:32

标签: python namedtuple

我知道可以通过子类化为namedtuples添加docstring,例如。

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

现在我希望为f1,f2和f3添加docstring。有没有办法做到这一点?我们公司正在使用Python2,不要以为人们会让我使用3。

1 个答案:

答案 0 :(得分:2)

我不确定在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

但要获得文档字符串会感觉很麻烦: - )。