在Python中从同一个类中调用另一个方法

时间:2014-09-13 17:18:47

标签: python class methods event-handling python-watchdog

我是python的新手。我试图将值从一个方法传递到类中的另一个方法。我搜索了这个问题,但我找不到合适的解决方案。因为在我的代码中," if"正在调用类的方法" on_any_event"反过来应该调用我的另一种方法" dropbox_fn",它使用来自" on_any_event"的值。如果" 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"没有事件参数的方法。所以,而不是返回价值,调用" dropbox_fn"在" on_any_event"会是一个更好的方式。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:36)

要调用该方法,您需要使用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)

答案 1 :(得分:4)

要从一个作用域访问成员函数或变量到另一个作用域(在你的情况下,我们需要使用类对象引用方法或变量的一个方法。你可以通过引用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)