2014-09-13 92 views
11

我对python非常陌生。我试图在课堂上将一种方法的价值传递给另一种方法。我搜索了这个问题,但我无法得到适当的解决方案。因为在我的代码中,“if”正在调用类的方法“on_any_event”,作为回报,应该调用另一个方法“dropbox_fn”,它使用“on_any_event”中的值。如果“dropbox_fn”方法在类之外,它会起作用吗?从Python中的同一类中调用另一种方法

我会用代码来说明。

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”将是更好的方法。有人可以帮忙吗?

回答

25

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

所以在“dropbox_fn”,我可以使用“文件名”,而不是直接“self.name =文件名” ????? – kirti 2014-09-13 17:37:20

+0

@kirti,你说得对。 – falsetru 2014-09-13 17:39:30

+0

确定它工作!!“dropbox_fn”成功从“on_any_event”获得了文件名。 – kirti 2014-09-13 17:43:25

3

要访问成员函数和变量从一个范围到另一个范围(在您的情况下,一个方法,我们需要参考的方法或变量,类对象的另一种方法,你可以用自己的关键字指做哪些作为参照类对象。

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) 
相关问题