Sto scrivendo una classe leggera i cui attributi devono essere accessibili pubblicamente e solo a volte sovrascritti in istanze specifiche. Non esiste alcuna disposizione nel linguaggio Python per la creazione di docstring per attributi di classe, o qualsiasi tipo di attributo, per quella materia. Qual è il modo previsto e supportato, dovrebbe essercene uno, per documentare questi attributi? Attualmente sto facendo questo genere di cose:
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)
Ciò risulterà nella docstring della classe contenente la sezione docstring standard iniziale, così come le righe aggiunte per ogni attributo tramite l'assegnazione aumentata a __doc__
.
Sebbene questo stile non sembri essere espressamente vietato nelle linee guida dello stile della docstring , non è nemmeno menzionato come opzione. Il vantaggio qui è che fornisce un modo per documentare gli attributi insieme alle loro definizioni, creando comunque una docstring di classe presentabile ed evitando di dover scrivere commenti che reiterano le informazioni dalla docstring. Sono ancora un po 'infastidito dal fatto che devo effettivamente scrivere due volte gli attributi; Sto considerando di utilizzare le rappresentazioni di stringa dei valori nella docstring per evitare almeno la duplicazione dei valori predefiniti.
È questa una atroce violazione delle convenzioni comunitarie ad hoc? Va bene? C'è un modo migliore? Ad esempio, è possibile creare un dizionario contenente valori e docstring per gli attributi e quindi aggiungere il contenuto alla classe __dict__
e docstring verso la fine della dichiarazione di classe; questo allevierebbe la necessità di digitare due volte i nomi e i valori degli attributi. modifica : quest'ultima idea è, credo, non effettivamente possibile, almeno non senza costruire dinamicamente l'intera classe dai dati, il che sembra davvero una pessima idea a meno che non ci sia qualche altra ragione per farlo.
Sono abbastanza nuovo in Python e sto ancora elaborando i dettagli dello stile di codifica, quindi anche le critiche non correlate sono benvenute.
attribute doc string
menzionato in PEP 257 che non è ben noto e sembra difficile da trovare che possa rispondere alla domanda degli OP, ed è supportato da alcuni strumenti di origine. Questa non è un'opinione. È un fatto, e parte del linguaggio, e più o meno esattamente ciò che vuole l'OP.