2014-09-13 18 views
11

Jestem bardzo nowy dla Pythona. Próbowałem przekazać wartość z jednej metody do drugiej w klasie. Szukałem informacji o problemie, ale nie mogłem uzyskać odpowiedniego rozwiązania. Ponieważ w moim kodzie "if" wywołuje metodę klasy "on_any_event", która w zamian powinna wywołać moją inną metodę "dropbox_fn", która wykorzystuje wartość z "on_any_event". Czy to działa, jeśli metoda "dropbox_fn" znajduje się poza klasą?Wywołanie jednej metody z innej w tej samej klasie w Pythonie

Będę ilustrować za pomocą kodu.

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() 

Głównym problemem tutaj jest .. Nie mogę wywołać metody "on_any_event" bez parametru zdarzenia. Więc zamiast zwracać wartość, lepszym rozwiązaniem byłoby wywoływanie "dropbox_fn" w "on_any_event". Czy ktoś może w tym pomóc?

Odpowiedz

25

Aby wywołać tę metodę, musisz zakwalifikować funkcję za pomocą self.. Oprócz tego, jeśli chcesz przekazać nazwę pliku, dodaj parametr filename (lub inną nazwę, którą chcesz).

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

Więc w „dropbox_fn”, mogę użyć „nazwa_pliku” bezpośrednio zamiast „self.name = nazwa pliku” ????? – kirti

+0

@kirti, masz rację. – falsetru

+0

OK zadziałało !!. "dropbox_fn" pomyślnie uzyskał nazwę pliku od "on_any_event". – kirti

3

Aby dostęp do funkcji członka lub zmienne z jednego zakresu na inny zakres (w przypadku jednej metody do innej metody, musimy odwołać się metodę lub zmienną klasy obiektu. I można to zrobić poprzez odwołanie z kluczowych samodzielnego który odnoszą się do klasy obiektu.

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) 
Powiązane problemy