在使用外部函数的局部变量的另一个函数内部定义一个函数非常有意义,特别是当您将内部函数本身传递给代码的另一部分时,就像您对事件订阅所做的那样。
但是,查看您的代码,您需要的对象和事件之间似乎已经存在直接关系。我明白C1.method2.RequestEvent
了,所以看起来RequestEvent
可以很容易地引用C1
. 如果是这种情况,那么它可以将其传递给处理程序,处理程序看起来像这样:
def handleResponseEvent(request, response, dnp):
事件引用dnp
的实例在哪里( )。也有可能或已经参考了,因此您不需要额外的参数。DNPClass
C1
request
response
DNPClass
这将允许您使用相同的处理程序进行订阅,而不管实例如何。例如:
def main():
C1 = DNPClass()
C1.method1(arg1, arg2, arg3, arg4, arg5)
# subscribing to event
C1.method2.RequestEvent += handleResponseEvent # will call C1.method3
C2 = DNPClass()
C2.method2.RequestEvent += handleResponseEvent # will call C2.method3
def handleResponseEvent(request, response):
#code to execute when event handler is called
#code references additional method from current DNPClass instance
request.dnp.method3()
...
如果这不起作用,并且编辑DNPClass
代码使其工作不可行,那么我至少会将其限制为接受实例的单个函数,这样您就不需要每次都定义一个新的内部函数。像这样的东西:
def subscribe_handleResponseEvent(dnp):
def handleResponseEvent(request, response):
#code to execute when event handler is called
#code references additional method from dnp instance
dnp.method3()
...
dnp.method2.RequestEvent += handleResponseEvent
def main():
C1 = DNPClass()
C1.method1(arg1, arg2, arg3, arg4, arg5)
# subscribing to event
subscribe_handleResponseEvent(C1)
...