Mi sto gonfiando di documentazione, perché ogni volta che incontro un tipo di anatra complesso, ho bisogno di un modo per dire "questo tipo di anatra", ma invece di rimanere intrappolato in un ciclo infinito di "la tua funzione richiede questo input, ma non lo documenta ", e poi lo documenta. Ciò si traduce in gonfio, la documentazione ripetitivi, come il seguente:Come documentare un tipo di anatra?
def Foo(arg):
"""
Args:
arg: An object that supports X functionality, and Y functionality,
and can be passed to Z other functionality.
"""
# Insert code here.
def Bar(arg):
"""
Args:
arg: An object that supports X functionality, and Y functionality,
and can be passed to Z other functionality.
"""
# Insert code here.
E così via, e così via, per Baz
, Qux
, e altre funzioni. Ho bisogno di un modo più breve di scrivere "arg
è un (tipo di oggetto)".
Per alcuni tipi di anatre, è facile come "Un oggetto dict-like": sappiamo quello che ci aspettiamo da un dict, e così, sappiamo cosa passare. A dict
, o qualcosa che può imitarlo.
Penso che C++ abbia lo stesso problema con i tipi di modelli. Haskell avrebbe voluto, ma si può usare la definizione di una classe di caratteri per documentarla. (Nota: Haskell classes! = Classi in Java/C++/Python/etc.) (Nota: in realtà non programma in Haskell, quindi perdonami se è un esempio di merda.)
Devo andare al tradizionale OO route, e scrivi semplicemente una classe base e dì "qualcosa come questa classe base" nei documenti? Il codice non imporrebbe derivando dalla classe base (poiché non vi è alcun requisito per l'oggetto da derivare da esso), e la classe base non aggiunge alcun valore se non per documentare le proprietà dell'interfaccia, in sostanza.
D'altro canto, sto programmando Python e cerco di programmare all'interno degli idiomi di una lingua. (Come fare altrimenti fa solitamente male.) Le classi base sono buone per ereditare le funzionalità, ma quando la classe base è completamente astratta, non sembra aggiungere valore in un linguaggio tipizzato da anatra.
EDIT: per le risposte: So cosa tipizzazione anatra è (che dovrebbe essere evidente dal post). Dove posso documentare è la domanda, esp. quando non esiste una classe per allegare documentazione a.
Mi piace il termine "si comporta come" e mantenere i requisiti generali documentati a meno che non vi sia un motivo specifico per esporre ulteriori dettagli. Ad esempio, se sono necessari solo un indicizzatore e un conteggio, direi che "agisce come un elenco". Per altri tipi, è lo stesso: "x si comporta come un animale", dove presumibilmente l'idea che un "cane è un animale" è documentata/assicurata altrove. –
@pst: Sì, ma cos'è un animale e cosa ci aspettiamo dall'animale e dove lo documentiamo? – Thanatos
'classe Animal' e' class Dog' da qualche parte, con la propria documentazione :) Python è molto radicato nel modello di istanza di classe. –