2016-07-23 3 views
1

名前付きタプルにdocstringをサブクラス化することで追加できます。名前付きタプルフィールドにdocstringを追加する

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

ここで、f1、f2、およびf3にdocstringを追加します。それをする方法はありますか?私たちの会社はPython2を使っていますが、人々は私に3を使うようには思わないでください。

+1

メモ:このコードには「pass」は必要ありません: – mgilson

+0

とにかくpy 2またはpy 3を使用しています –

+1

[このトピック](http://stackoverflow.com/questions/1606436/adding -docstrings-to-namedtuples)は問題をカバーしていますか? – alecxe

答えて

2

python2.xでこれを行う良い方法があるかどうかはわかりません。 python3.xで、あなたは直接__doc__を入れ替えることができます。残念ながら、python2.xはあなたに、この時点でエラー与え

$ 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 

を、あなたはでそれを得ることができます

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

しかし、これはdocstringsを取得するために多くの手間がかかるように感じます:-)。

+0

それは私が尋ねる理由です... Pythonのバージョンは2であることを忘れた。 – xis

+0

@xis - 私はpython2.xバリアントを追加しました。作業)。 – mgilson

関連する問題