web-dev-qa-db-ja.com

Pythonで同じクラス内の別のメソッドを呼び出す

私はpythonが初めてです。クラス内のあるメソッドから別のメソッドに値を渡そうとしていました。この問題について検索しましたが、適切な解決策が見つかりませんでした。私のコードでは、「if」がクラスのメソッド「on_any_event」を呼び出しているので、代わりに「on_any_event」の値を使用する別のメソッド「dropbox_fn」を呼び出す必要があります。 「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"メソッドを呼び出すことはできません。そのため、値を返すのではなく、「on_any_event」内で「dropbox_fn」を呼び出す方が良い方法です。誰かがこれを助けることができますか?

17
kirti

メソッドを呼び出すには、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)
42
falsetru

あるスコープから別のスコープにメンバー関数または変数にアクセスするには(ある場合、あるメソッドから別のメソッドに、メソッドまたは変数をクラスオブジェクトで参照する必要があります。クラスオブジェクトとして参照する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)
4
Projesh Bhoumik