funzione di callback python con argomenti cattiva pratica?

3

Ho scritto una classe listener che esegue un callback specificato dal programmatore. Il messaggio è fornito come argomento di callback. Mi sono reso conto che un programmatore che usa la classe avrà bisogno di guardare il mio codice per vedere la struttura del messaggio.

Esiste un modo per fornire suggerimenti sui tipi alle funzioni di callback. O devo refactoring il mio callback per essere una notifica di un messaggio in modo che il programmatore possa invocare una funzione get per ottenere il msg effettivo dopo la notifica. (L'aiuto IDE funziona in questo caso ma la classe è un po 'più difficile da usare)

In alternativa potevo semplicemente passare qualcosa di generico nell'argomento come un dizionario.

    
posta Ta Aa 01.04.2018 - 05:02
fonte

1 risposta

4

Per quanto riguarda l'argomento callback puoi usare il modulo typing di python ( documenti ). Sarà qualcosa come Callable quale sintassi di abbonamento deve essere sempre utilizzata con esattamente due valori : la lista degli argomenti e il tipo di ritorno:

def listener(callback: Callable[[int, str], int]):
    #do magic here

def callable(a: int, b: str) -> int:
    # user defined callable here

In questo caso, gli IDE (come le versioni Pycharm e Jedi moderne) rileveranno i tipi di testo Callable , e l'utente listener non dovrà cercare la struttura callback .

Per sapere se è meglio fornire un dizionario o qualcos'altro di più generico è discutibile e dipende da casi d'uso reali.

P.S. ovviamente, il modulo typing non è disponibile out of the box in python2

    
risposta data 01.04.2018 - 05:32
fonte

Leggi altre domande sui tag