Pour ce faire, il suffit de créer une classe d'enveloppe simple et vide autour de la valeur renvoyée par la fonction namedtuple
. Contenu d'un fichier que j'ai créé ( nt.py
):
from collections import namedtuple
Point_ = namedtuple("Point", ["x", "y"])
class Point(Point_):
""" A point in 2d space """
pass
Puis dans le REPL de Python :
>>> print nt.Point.__doc__
A point in 2d space
Ou vous pourriez le faire :
>>> help(nt.Point) # which outputs...
Help on class Point in module nt:
class Point(Point)
| A point in 2d space
|
| Method resolution order:
| Point
| Point
| \_\_builtin\_\_.tuple
| \_\_builtin\_\_.object
...
Si vous n'aimez pas faire cela à la main à chaque fois, il est trivial d'écrire une sorte de fonction d'usine pour le faire :
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__
qui sort :
A point in 3d space