Appeler une méthode d'une autre dans la même classe en Python
je suis très nouveau en python. J'essayais de passer de la valeur d'une méthode à une autre dans la classe. J'ai cherché à propos de la question mais je n'ai pas pu trouver la bonne solution. Parce que dans mon code, "si" appelle la méthode de class "on_any_event" qui en retour devrait appeler une autre méthode "dropbox_fn", qui utilise la valeur de "on_any_event". Cela fonctionnera-t-il si la méthode" dropbox_fn " est en dehors de la classe?
je vais l'illustrer avec le code.
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()
Le principal problème en voici.. Je ne peux pas appeler la méthode "on_any_event" sans paramètre d'événement. Ainsi, plutôt que de retourner la valeur, appeler "dropbox_fn" à l'intérieur de "on_any_event" serait un meilleur moyen. Quelqu'un peut-il aider?
2 réponses
Pour appeler la méthode, vous devez qualifier fonction avec self.
. En plus de cela, si vous souhaitez passer un nom de fichier, ajouter un filename
paramètre (ou autre nom que vous voulez).
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)
pour accéder aux fonctions de membre ou aux variables d'un scope à un autre scope (dans votre cas une méthode à une autre méthode nous avons besoin de renvoyer la méthode ou la variable avec l'objet de classe. et vous pouvez le faire en vous référant avec des mots-clés auto qui se réfèrent comme objet de 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)