Ich schreibe eine Lightweight-Klasse, deren Attribute öffentlich zugänglich sein sollen und nur manchmal in bestimmten Instanziierungen überschrieben werden. In der Python-Sprache gibt es keine Möglichkeit, Dokumentzeichenfolgen für Klassenattribute oder andere Attribute zu erstellen. Was ist der erwartete und unterstützte Weg, um diese Attribute zu dokumentieren? Momentan mache ich so etwas:
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)
Dies führt dazu, dass der Docstring der Klasse den anfänglichen Standard-Docstring-Abschnitt sowie die Zeilen enthält, die für jedes Attribut über eine erweiterte Zuordnung zu hinzugefügt wurden __doc__
.
Obwohl dieser Stil in der EU nicht ausdrücklich verboten zu sein scheint Richtlinien für Docstring-Stile , wird er auch nicht als Option erwähnt. Der Vorteil hierbei ist, dass es eine Möglichkeit bietet, Attribute neben ihren Definitionen zu dokumentieren, während gleichzeitig eine vorzeigbare Klassen-Dokumentzeichenfolge erstellt wird, und dass keine Kommentare geschrieben werden müssen, die die Informationen aus der Dokumentzeichenfolge wiederholen. Ich bin immer noch etwas verärgert, dass ich die Attribute tatsächlich zweimal schreiben muss; Ich denke darüber nach, die Zeichenfolgendarstellungen der Werte in der Dokumentzeichenfolge zu verwenden, um zumindest eine Verdoppelung der Standardwerte zu vermeiden.
Ist dies ein abscheulicher Verstoß gegen die Ad-hoc-Community-Konventionen? Ist es okay? Gibt es einen besseren Weg? Beispielsweise ist es möglich, ein Wörterbuch mit Werten und Dokumentzeichenfolgen für die Attribute zu erstellen und den Inhalt __dict__
gegen Ende der Klassendeklaration der Klasse und der Dokumentzeichenfolge hinzuzufügen . Dies würde die Notwendigkeit verringern, die Attributnamen und -werte zweimal einzugeben. edit : Diese letzte Idee ist meiner Meinung nach nicht wirklich möglich, zumindest nicht ohne das dynamische Erstellen der gesamten Klasse aus Daten, was eine wirklich schlechte Idee zu sein scheint, es sei denn, es gibt einen anderen Grund dafür.
Ich bin ziemlich neu in Python und arbeite immer noch an den Details des Codierungsstils, daher sind auch nicht verwandte Kritiken willkommen.
attribute doc string
in PEP 257 eine Erwähnung , die nicht gut bekannt ist und schwer zu finden scheint, um die Frage des OP zu beantworten, und die von einigen Quellwerkzeugen unterstützt wird. Dies ist keine Meinung. Es ist eine Tatsache und ein Teil der Sprache und ziemlich genau das, was das OP will.