2014-09-13 15 views
11

Sono molto nuovo in Python. Stavo cercando di passare il valore da un metodo all'altro all'interno della classe. Ho cercato il problema ma non ho potuto ottenere una soluzione adeguata. Perché nel mio codice, "if" sta chiamando il metodo della classe "on_any_event" che in cambio dovrebbe chiamare il mio altro metodo "dropbox_fn", che usa il valore di "on_any_event". Funzionerà, se il metodo "dropbox_fn" è al di fuori della classe?Chiamare un metodo da un altro all'interno della stessa classe in Python

Illustrerò con il codice.

class MyHandler(FileSystemEventHandler): 
def on_any_event(self, event): 
    srcpath=event.src_path 
    print (srcpath, 'has been ',event.event_type) 
    print (datetime.datetime.now()) 
    #print srcpath.split(' ', 12); 
    filename=srcpath[12:] 
    return filename # I tried to call the method. showed error like not callable 

def dropbox_fn(self)# Or will it work if this methos is outside the class ? 
    #this method uses "filename" 

if __name__ == "__main__": 
    path = sys.argv[1] if len(sys.argv) > 1 else '.' 
    print ("entry") 
    event_handler = MyHandler() 
    observer = Observer() 
    observer.schedule(event_handler, path, recursive=True) 
    observer.start() 
    try: 
    while True: 
     time.sleep(1) 
    except KeyboardInterrupt: 
    observer.stop() 
    observer.join() 

Il problema principale qui è .. non riesco a chiamare il metodo "on_any_event" senza parametro dell'evento. Quindi, piuttosto che restituire valore, chiamare "dropbox_fn" all'interno di "on_any_event" sarebbe un modo migliore. Qualcuno può aiutare con questo?

risposta

25

Per chiamare il metodo, è necessario qualificare la funzione con self.. Inoltre, se si desidera passare un nome file, aggiungere un parametro filename (o un altro nome desiderato).

class MyHandler(FileSystemEventHandler): 

    def on_any_event(self, event): 
     srcpath = event.src_path 
     print (srcpath, 'has been ',event.event_type) 
     print (datetime.datetime.now()) 
     filename = srcpath[12:] 
     self.dropbox_fn(filename) # <---- 

    def dropbox_fn(self, filename): # <----- 
     print('In dropbox_fn:', filename) 
+0

Così nella "dropbox_fn", posso usare il "nome del file" direttamente piuttosto che "self.name = filename" ????? – kirti

+0

@kirti, Hai ragione. – falsetru

+0

ok ha funzionato !!. "dropbox_fn" ha ottenuto con successo il nome del file da "on_any_event". – kirti

3

Per l'accesso a funzioni membro o variabili da un ambito all'altro ambito (Nel tuo caso un metodo a un altro metodo abbiamo bisogno di fare riferimento metodo o variabile oggetto di classe. E si può fare facendo riferimento con l'auto parola chiave che fare riferimento come oggetto classe.

class YourClass(): 

    def your_function(self, *args): 

     self.callable_function(param) # if you need to pass any parameter 

    def callable_function(self, *params): 
     print('Your param:', param) 
Problemi correlati