Piszę lekką klasę, której atrybuty mają być publicznie dostępne i tylko czasami nadpisywane w określonych instancjach. W języku Python nie ma przepisu na tworzenie ciągów dokumentów dla atrybutów klas, ani żadnego innego rodzaju atrybutów. Jaki jest oczekiwany i obsługiwany sposób udokumentowania tych atrybutów, czy powinien istnieć? Obecnie robię takie rzeczy:
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)
Spowoduje to, że dokumentacja klasy będzie zawierała początkową standardową sekcję docstringową, a także wiersze dodane dla każdego atrybutu poprzez rozszerzone przypisanie do __doc__
.
Chociaż ten styl nie wydaje się być wyraźnie zabroniony w wytycznych dotyczących stylów dokumentów , nie jest on również wspomniany jako opcja. Zaletą jest to, że zapewnia sposób dokumentowania atrybutów wraz z ich definicjami, jednocześnie tworząc prezentowalny dokument klasy i unikając konieczności pisania komentarzy, które powtarzają informacje z dokumentu. Nadal jestem trochę poirytowany, że muszę dwukrotnie pisać atrybuty; Rozważam użycie reprezentacji ciągów wartości w dokumencie, aby przynajmniej uniknąć powielania wartości domyślnych.
Czy to ohydne naruszenie konwencji wspólnoty ad hoc? Czy to w porządku? Czy jest lepszy sposób? Na przykład, możliwe jest utworzenie słownika zawierającego wartości i ciągi dokumentacyjne dla atrybutów, a następnie dodanie zawartości do klasy __dict__
i napisów dokumentacyjnych na końcu deklaracji klasy; zmniejszyłoby to potrzebę dwukrotnego wpisywania nazw i wartości atrybutów. edycja : ten ostatni pomysł jest, myślę, w rzeczywistości niemożliwy, przynajmniej nie bez dynamicznego budowania całej klasy z danych, co wydaje się naprawdę złym pomysłem, chyba że istnieje inny powód, aby to zrobić.
Jestem całkiem nowy w Pythonie i nadal pracuję nad szczegółami stylu kodowania, więc niepowiązane krytyki są również mile widziane.
attribute doc string
wspomniany w PEP 257, który nie jest dobrze znany i wydaje się trudny do znalezienia, który może odpowiedzieć na pytanie PO i jest obsługiwany przez niektóre narzędzia źródłowe. To nie jest opinia. To fakt, część języka i właściwie to, czego chce OP.