用python实现回调或侦听器

2024-04-24 12:56:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始从事python编程(我有java方面的经验)。我想在类中实现回调/侦听器。我把现有的样品弄糊涂了。我刚刚实现了一个示例。请引导我

我的python类如下

class myClass:
    def __init__(self):
        self.__result = 0

    def connect(self):
        self.__result = 1

我的主要python代码如下

import myClass

def on_connect(result):
    print("Connected with result code "+result)

myclass = myClass()
myclass.on_connect = on_connect

myclass.connect()

我只想在连接方法主代码中接收结果。如何为此修改myClass?你知道吗

提前谢谢


Tags: 代码self示例ondef编程connectmyclass
2条回答

创建接受回调作为参数的类:

class MyClass:

    def __init__(self, on_connect=None):
        self._result = 0
        # store callback reference in a variable
        self._on_connect = on_connect

    def connect(self):
        self._result = 1
        # if callback is defined and it is a function/method
        if self._on_connect and callable(self._on_connect):
            # Send the object instance to the callback, 
            # you may use the same callback for multiple objects.
            self._on_connect(self)

    def get_result(self):
        return self._result

然后:

import MyClass

def on_connect_callback(instance):
    print('Connected with result code {}'.format(
        instance.get_result()))

my_obj = MyClass(on_connect=on_connect_callback)
my_obj.connect()

让我们向类添加处理程序,使用niceadd方法和调用回调的常规fire

class myClass:
    def __init__(self):
        self.__result = 0
        self.on_connect = []

    def connect(self):
        self.__result = 1
        self.fire()

    def add_listener(self, listener):
        self.on_connect.append(listener)

    def fire(self):
        for listener in self.on_connect:
            listener(self.__result)

然后我们只需要在主代码中重做一件事—添加侦听器的方式。你知道吗

import myClass

def on_connect(result):
    print("Connected with result code "+result)

myclass = myClass()
myclass.add_listener(on_connect)

myclass.connect()

相关问题 更多 >