web-dev-qa-db-fra.com

Appel d'une méthode à partir d'une autre dans la même classe dans Python

Je suis très nouveau sur python. J'essayais de transmettre la valeur d'une méthode à une autre dans la classe. J'ai cherché sur le problème mais je n'ai pas pu trouver de solution appropriée. Parce que dans mon code, "if" appelle la méthode de la classe "on_any_event" qui en retour devrait appeler ma 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 illustrer avec du 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 problème principal ici est .. Je ne peux pas appeler la méthode "on_any_event" sans paramètre d'événement. Donc, plutôt que de renvoyer de la valeur, appeler "dropbox_fn" à l'intérieur de "on_any_event" serait une meilleure façon. Quelqu'un peut-il m'aider?

17
kirti

Pour appeler la méthode, vous devez qualifier la fonction avec self.. En plus de cela, si vous souhaitez passer un nom de fichier, ajoutez un paramètre filename (ou tout autre nom que vous souhaitez).

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)
42
falsetru

Pour accéder aux fonctions membres ou aux variables d'une portée à une autre portée (dans votre cas, une méthode à une autre méthode, nous devons faire référence à la méthode ou à la variable avec l'objet 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)
4
Projesh Bhoumik