Python中回调或侦听器的实现

问题描述 投票:0回答:2

我刚刚进入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()

我只是想在on_connect方法主代码中接收结果。如何为此修改myClass?

提前感谢

python python-3.x callback listener
2个回答
1
投票

创建一个将回调作为参数的类:

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()

0
投票

让我们向类添加处理程序,使用不错的add方法和调用回调的常规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()
© www.soinside.com 2019 - 2024. All rights reserved.