私は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」を呼び出す方が良い方法です。誰かがこれを助けることができますか?
メソッドを呼び出すには、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)
あるスコープから別のスコープにメンバー関数または変数にアクセスするには(ある場合、あるメソッドから別のメソッドに、メソッドまたは変数をクラスオブジェクトで参照する必要があります。クラスオブジェクトとして参照する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)