将文档字符串添加到 namedtuple 字段
Add docstring to a namedtuple field
我知道可以通过子类化为命名元组添加文档字符串,例如
from collections import namedtuple
NT = namedtuple('NT', ['f1', 'f2', 'f3'])
class NTWithDoc(NT):
""" DOCSTRING """
__slots__ = ()
现在我想为 f1、f2 和 f3 添加文档字符串。有办法吗?我们公司用的是Python2,别以为人家会让我用3.
我不确定 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
但是去获取文档字符串感觉很麻烦:-)。
我知道可以通过子类化为命名元组添加文档字符串,例如
from collections import namedtuple
NT = namedtuple('NT', ['f1', 'f2', 'f3'])
class NTWithDoc(NT):
""" DOCSTRING """
__slots__ = ()
现在我想为 f1、f2 和 f3 添加文档字符串。有办法吗?我们公司用的是Python2,别以为人家会让我用3.
我不确定 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
但是去获取文档字符串感觉很麻烦:-)。