我刚刚进入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?
提前感谢
创建一个将回调作为参数的类:
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()
让我们向类添加处理程序,使用不错的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()