python 看门狗在事件发生时调用 class 方法

python watchdog invoke class method when event happend

我正在使用看门狗在某个文件被更改时得到通知,

只要我不使用 类 就可以正常工作

class MyEventHandler(PatternMatchingEventHandler):
    def on_modified(self, event):
        super(MyEventHandler, self).on_modified(event)
        logging.info("File %s was just modified" % event.src_path)
        readConfigFile()

def readConfigFile():
    # set certain values here

def main():
    while True:
        # using values from configFile here

if __name__ == '__main__':
    main()
    # do something else

但是如果我把一些 类 放在适当的位置,我不知道如何调用该方法,那么现在的设置就像这样

class MyEventHandler(PatternMatchingEventHandler):
    def on_modified(self, event):
        super(MyEventHandler, self).on_modified(event)
        logging.info("File %s was just modified" % event.src_path)
        readConfigFile()  #<- i want to call this method in class Configuration

class Configuration:
    def readConfigFile(self):
         # set certain values here
    def provideValues(self):
         # get certain values here

class MainClass:
    def __init__(self):
        self.conf = Configuration()
        event_handler = MyEventHandler(patterns=patterns)

    def main(self):
        while True:
            # using values from configFile here
            bla = self.conf.provideValues()

if __name__ == '__main__':
    mc = MainClass()
    mc.main()
    # do something else

有很多方法可以做到;这是一个:

class MyEventHandler(PatternMatchingEventHandler):
    def hook(self, thing):
        self.thing = thing
    def on_modified(self, event):
        super(MyEventHandler, self).on_modified(event)
        logging.info("File %s was just modified" % event.src_path)
        self.thing.readConfigFile()  #<- i want to call this method in class Configuration

class MainClass:
    def __init__(self):
        self.conf = Configuration()
        event_handler = MyEventHandler(patterns=patterns)
        event_handler.hook(self.conf)