1. ホーム
  2. python

[解決済み] namedtupleにdocstringを追加する?

2023-03-11 09:22:15

質問

namedtupleにドキュメント文字列を簡単に追加することは可能でしょうか?

私は試しました。

from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
"""
A point in 2D space
"""

# Yet another test

"""
A(nother) point in 2D space
"""
Point2 = namedtuple("Point2", ["x", "y"])

print Point.__doc__ # -> "Point(x, y)"
print Point2.__doc__ # -> "Point2(x, y)"

となっていますが、これでは切れません。何か他の方法で可能でしょうか?

どのように解決するのですか?

から返される値の周りに、シンプルで空のラッパークラスを作成することでこれを実現することができます。 namedtuple . 私が作成したファイルの内容 ( nt.py ):

from collections import namedtuple

Point_ = namedtuple("Point", ["x", "y"])

class Point(Point_):
    """ A point in 2d space """
    pass

次にPython REPLで。

>>> print nt.Point.__doc__
 A point in 2d space 

とすることもできます。

>>> help(nt.Point)  # which outputs...

モジュール nt のクラス Point のヘルプです。

クラスPoint(Point)
 | 2次元空間上の点
 |  
 | メソッドの解決順序
 | 点
 | 点
 | __builtin__.tuple
 | __builtin__.object
 ...

毎回手作業でやるのが嫌なら、これを行うためのある種のファクトリ関数を書くのは些細なことです。

def NamedTupleWithDocstring(docstring, *ntargs):
    nt = namedtuple(*ntargs)
    class NT(nt):
        __doc__ = docstring
    return NT

Point3D = NamedTupleWithDocstring("A point in 3d space", "Point3d", ["x", "y", "z"])

p3 = Point3D(1,2,3)

print p3.__doc__

と出力します。

A point in 3d space