Вызов одного метода из другого в том же классе в 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" был бы лучшим способом. Может кто-нибудь помочь с этим?
Ответы
Ответ 1
Чтобы вызвать метод, вам нужно квалифицировать функцию с помощью 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)
Ответ 2
Чтобы получить доступ к функциям-членам или переменным из одной области видимости в другую область (в вашем случае один метод для другого метода нам нужно передать метод или переменную с объектом класса, и вы можете сделать это, обратившись к ключевому слову 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)