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?

14
demandé sur falsetru 2014-09-13 21:18:47

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)
33
répondu falsetru 2014-09-13 17:42:19

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)
2
répondu Projesh Bhoumik 2017-08-11 10:19:30