Stiamo prendendo in considerazione l'utilizzo di Python (IronPython, ma non credo sia pertinente) per fornire una sorta di supporto "macro" per un'altra applicazione, che controlla un pezzo di equipaggiamento.Qual è un buon modo per fornire ulteriori decorazioni/metadati per i parametri della funzione Python?
Vorremmo scrivere funzioni abbastanza semplici in Python, che richiedono alcuni argomenti: si tratta di cose come orari, temperature e posizioni. Diverse funzioni prenderebbero argomenti diversi e l'applicazione principale conterrebbe un'interfaccia utente (qualcosa come una griglia di proprietà) che consente agli utenti di fornire valori per gli argomenti della funzione Python.
Quindi, ad esempio, la funzione 1 potrebbe richiedere un tempo e una temperatura e la funzione2 potrebbe assumere una posizione e un paio di volte.
Ci piacerebbe essere in grado di creare dinamicamente l'interfaccia utente dal codice Python. Le cose facili da fare sono trovare un elenco di funzioni in un modulo e (usando inspect.getargspec) per ottenere un elenco di argomenti per ciascuna funzione.
Tuttavia, solo una lista di nomi di argomenti non è veramente sufficiente - idealmente vorremmo essere in grado di includere ulteriori informazioni su ciascun argomento - ad esempio, è "tipo" (tipo di alto livello - tempo, temperatura , ecc., non il tipo a livello di lingua), e forse un "nome descrittivo" o una descrizione.
Quindi, la domanda è, quali sono i buoni modi "pitonici" di aggiungere questo tipo di informazioni a una funzione.
Le due possibilità che ho pensato sono:
Utilizzare una rigida convenzione di denominazione per gli argomenti, e quindi dedurre roba su di loro dai loro nomi (recuperati utilizzando getargspec)
Invent nostra docstring meta-language (potrebbe essere poco più di CSV) e usare la docstring per i nostri metadati.
Perché Python sembra piuttosto popolare per la costruzione di scripting in grandi applicazioni, immagino che questo è un problema risolto con alcune convenzioni comuni, ma non sono stato in grado di trovarli.
Se si sta utilizzando python3 , è possibile utilizzare le annotazioni delle funzioni: http://www.python.org/dev/peps/pep-3107/ – unutbu
py.test utilizza il primo approccio menzionato per specificare i dati per ciascuno dei test. Funziona abbastanza bene nel loro caso. –