2016-03-09 6 views
6

PyLint mi ha detto che uno dei miei metodi di classe non aveva bisogno di essere un metodo, ma poteva essere semplicemente una funzione in una classe poiché non utilizzava alcun attributo di classe. Questo mi ha fatto fare cose che pensavo fossero "cattive", ma forse sono Pythonic. Il seguente codice che cosa Python vuole che facciamo?È non-pitonico definire una funzione all'interno di un metodo di classe?

class TestClass(ParentClass): 
    def __init__(self): 
     def callbackfunction(text): 
      print("hello") 
     ParentClass.map_event_to_callback(ParentClass.event, callbackfunction) 

dove ParentClass.event emette text al suo richiamo, ma ci limiteremo a ignorare che la stampa "hello" invece. Ancora più semplice:

class TestClass(): 
    def __init__(self, text): 
     def printhello(text): 
      print("hello") 
     printhello(text) 

supponendo che non si preoccupano text o printhello dopo __init__.

+7

No, va bene. Potresti usare anche un 'lambda'. –

+2

Una funzione all'interno di un metodo non è in realtà diversa da una funzione all'interno di una funzione. A volte ha senso, e quando lo fa, non c'è motivo per non usarlo. –

+0

Grazie, @MartijnPieters e @TomKarzes! Mettere una funzione di callback all'interno di una classe ''__init__' mi ha fatto sentire sporco, ma non sapevo se esistesse un motivo tecnico per evitarlo o meno. @MartijnPieters, se rendi il tuo commento una risposta posso selezionarlo. –

risposta

1

La creazione di una funzione nidificata per un callback va bene. Dà anche a quella funzione l'accesso a tutti i locali nella funzione genitore (come chiusure).

è possibile utilizzare un lambda se tutto ciò che serve per eseguire è un'espressione:

class TestClass(ParentClass): 
    def __init__(self): 
     ParentClass.map_event_to_callback(ParentClass.event, lambda text: print("hello")) 
Problemi correlati