J'écris une classe légère dont les attributs sont destinés à être accessibles au public, et parfois seulement remplacés dans des instanciations spécifiques. Il n'y a aucune disposition dans le langage Python pour créer des docstrings pour les attributs de classe, ou toute sorte d'attributs, d'ailleurs. Quelle est la manière attendue et prise en charge, devrait-il y en avoir une, pour documenter ces attributs? Actuellement, je fais ce genre de chose:
class Albatross(object):
"""A bird with a flight speed exceeding that of an unladen swallow.
Attributes:
"""
flight_speed = 691
__doc__ += """
flight_speed (691)
The maximum speed that such a bird can attain.
"""
nesting_grounds = "Raymond Luxury-Yacht"
__doc__ += """
nesting_grounds ("Raymond Luxury-Yacht")
The locale where these birds congregate to reproduce.
"""
def __init__(self, **keyargs):
"""Initialize the Albatross from the keyword arguments."""
self.__dict__.update(keyargs)
Cela se traduira par la docstring de la classe contenant la section docstring standard initiale, ainsi que les lignes ajoutées pour chaque attribut via une affectation augmentée à __doc__
.
Bien que ce style ne semble pas être expressément interdit dans les directives de style docstring , il n'est pas non plus mentionné comme une option. L'avantage ici est qu'il fournit un moyen de documenter les attributs avec leurs définitions, tout en créant une docstring de classe présentable, et en évitant d'avoir à écrire des commentaires qui réitèrent les informations de la docstring. Je suis toujours un peu ennuyé de devoir écrire les attributs deux fois; J'envisage d'utiliser les représentations sous forme de chaîne des valeurs dans la docstring pour au moins éviter la duplication des valeurs par défaut.
Est-ce une violation odieuse des conventions communautaires ad hoc? Ça va? Y a-t-il un meilleur moyen? Par exemple, il est possible de créer un dictionnaire contenant des valeurs et des docstrings pour les attributs, puis d'ajouter le contenu à la classe __dict__
et à la docstring vers la fin de la déclaration de classe; cela éviterait de devoir taper deux fois les noms et valeurs d'attribut. edit : cette dernière idée n'est, je pense, pas réellement possible, du moins pas sans construire dynamiquement toute la classe à partir de données, ce qui semble être une très mauvaise idée à moins qu'il n'y ait une autre raison de le faire.
Je suis assez nouveau en python et je travaille toujours sur les détails du style de codage, donc les critiques sans rapport sont également les bienvenues.
attribute doc string
mentionné dans PEP 257 qui n'est pas bien connu et semble difficile à trouver qui peut répondre à la question des OP, et est pris en charge par certains outils sources. Ce n'est pas une opinion. C'est un fait, et une partie du langage, et à peu près exactement ce que veut l'OP.