Вызов одного метода из другого в том же классе в Python

Я очень плохо знаком с Python. Я пытался передать значение от одного метода к другому в классе. Я искал о проблеме, но я не мог получить правильное решение. Потому что в моем коде "if" вызывает метод класса "on_any_event", который в свою очередь должен вызвать мой другой метод dropbox_fn, который использует значение из "on_any_event". Будет ли это работать, если метод dropbox_fn находится вне класса?

Я проиллюстрирую с кодом.

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

Основная проблема здесь заключается в том, что.. Я не могу вызвать метод on_any_event без параметра события. Поэтому вместо того, чтобы возвращать значение, вызов "dropbox_fn" внутри "on_any_event" был бы лучшим способом. Может ли кто-нибудь помочь с этим?

2 ответа

Решение

Чтобы вызвать метод, вам нужно квалифицировать функцию с self., В дополнение к этому, если вы хотите передать имя файла, добавьте filename параметр (или другое имя, которое вы хотите).

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)

Чтобы получить доступ к функциям-членам или переменным из одной области в другую область (В вашем случае один метод к другому методу нам нужно ссылаться на метод или переменную с помощью объекта класса. Вы можете сделать это, ссылаясь на ключевое слово self, которое называется объектом класса.

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)
Другие вопросы по тегам