Python функция псевдо обратного вызова - PullRequest
0 голосов
/ 14 июля 2020

У меня есть main.py

import application

def foo(args):
    print("Invoked!")

def main():
    app = application.Application()
    # here i want to connect app.receivedMessage to foo

и мой application.py

class Application:
    def __init__(self):
        pass

    def receivedMessage(self, args):
        # somehow call foo(args)

В принципе, как я могу вызвать foo и передать аргументы при вызове ReceiveMessage. У меня есть и другие части класса Application, которые прослушивают сообщение USB и вызывают «gotMessage»

Спасибо

Ответы [ 2 ]

3 голосов
/ 14 июля 2020

Вы можете передать функцию foo своему Application объекту:

 class Application:
    def __init__(self, foo):
        self.foo = foo

    def receivedMessage(self, args):
        self.foo(args)
1 голос
/ 14 июля 2020

Передача функции в качестве аргумента тоже работает.

#!python3
class Application:
    def __init__(self):
        pass
    def receivedMessage(self,args,**kwargs):
        if kwargs and kwargs['foo']:
            foo=kwargs['foo']
            foo(args)

def foo(args):
    print('Invoked')
if __name__=='__main__':
    app = Application()
    app.receivedMessage("haha", foo=foo) # works
    app.receivedMessage("haha") # doesn't raise error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...