Sur la question de ce que add_argument
renvoie, si vous effectuez des tests dans une session interactive comme ipython
, le retour vous fixe:
In [73]: import argparse
In [74]: parser=argparse.ArgumentParser()
In [75]: parser.add_argument('foo',choices=['one','two','three'])
Out[75]: _StoreAction(option_strings=[], dest='foo', nargs=None, const=None, default=None, type=None, choices=['one', 'two', 'three'], help=None, metavar=None)
In [76]: _.choices
Out[76]: ['one', 'two', 'three']
Notez que d'autres méthodes comme add_argument_group
, add_subparsers
, add_parser
, add_mutually_exclusive_group
renvoient tous des objets qui peuvent être utilisés. Le fait que add_argument
ne soit pas documenté comme renvoyant un objet est, je pense, une omission de la documentation. En général, les utilisateurs n'ont pas besoin de l'utiliser, mais en tant que semi-développeur, je l'utilise tout le temps. La documentation pour argparse
n'est pas une spécification formelle de ce que le module peut ou ne peut pas faire; c'est plus un manuel d'instruction, un cran au-dessus d'un tutoriel, mais clairement pas une référence.
L'utilisation de parser._actions
est pratique, mais un cran plus profond dans les entrailles. J'ai suivi presque tous les bogues/problèmes et je ne peux pas penser à un seul qui déclencherait un changement à ce sujet. Il y a un gros retard dans les changements potentiels, mais les développeurs ont été réduits à une quasi-immobilité par peur de créer des problèmes de compatibilité ascendante. Il est plus facile de modifier la documentation que de modifier la fonctionnalité de argparse
.