我能找到的所有监听器实现示例都使用不带self
的监听器方法,如果您想在传递的监听器方法之外处理响应,这似乎没有帮助
以下是我正在尝试的:
class A:
@property
def command(self):
return self._command
@command.setter
def command(self, command):
self._command = command
self._notify_command_observers(command)
_command_callbacks = []
def _notify_command_observers(self, command):
for callback in self._command_callbacks:
callback(command) #<-- TypeError: function takes 2 positional arguments but 1 were given
def register_command_callback(self, callback):
self._command_callbacks.append(callback)
def receive_command(self, new_command):
self.command = new_command #<-- an external process will provide this "new_command" variable
class B:
def use_command(self, command):
print(command)
def command_listener(self, command):
self.use_command(command)
a = A()
a.register_command_callback(command_listener)
这将导致上述注释中显示的错误
如果在_notify_command_observers
内调用callback()
时使用self
,将传递错误的上下文,并且将找不到use_command()
当然,我可以删除command_listener()
中的self
,但是我需要访问class B
实例中的其他方法和变量
TL;DR:如何将侦听器方法传递给类实例,并在该侦听器中包含传递的类的上下文
-------编辑--------
使用@jasonharper的建议,这是有效的:
class B:
def __init__(self):
self.a = A()
self.a.register_command_callback(self.command_listener)
def use_command(self, command):
print(command)
def command_listener(self, command):
self.use_command(command)
目前没有回答
相关问题 更多 >
编程相关推荐