【发布时间】:2013-09-20 01:53:17
【问题描述】:
这可能是一个基本问题,但我是编程新手。我正在使用第三方 python 代码,它提供了一个带有事件和事件委托的类。事件和事件委托的语法如下:
public Delegate Sub RequestEventDelegate (request As MDNPRequest, _
response as MDNPResponseParser)
public Event RequestEvent As MDNPRequest.RequestEventDelegate
我编写了以下代码来订阅该事件,但无法正常工作。我不知道我是什么 做错了。
Mreq = MDNPRequest()
Mreq.RequestEvent += Mreq.RequestEventDelegate(handleResponseEvent)
def handleResponseEvent (request, response):
print ' event fired'
我将两行代码添加到打开通信通道的函数的末尾。我还测试了将这两行代码添加到在通信通道上发送轮询的函数中。在第二种情况下,事件触发并且每次我执行轮询功能。这是否违背了事件订阅的目的?
我认为我的问题可能是由于不同的函数创建了同一类的实例。我想使用下面显示的大纲将一些函数合并到一个类中。 Method1 创建了我希望 myClass 中的其他方法使用的 class1 的实例“a”。我尝试使用我设置为 class1 实例的类变量,但这不起作用。我使用类名引用类变量,例如来自 class1 的 myClass.variable.somemethod 但我得到“对象引用未设置为对象的实例”错误。使 myClass 中的所有方法都可以访问 a 的最佳方法是什么?最终我想从另一个模块调用 myClass 。
from file1 import *
myClass:
class_variable = class1() # class1 from file1
def __init__(self)
...
def Method1(self, argument list):
# this method instantiates a
...
a = class1()
def Method2 (self):
...
a.class1method1
...
def Method3 (self):
...
a.class1method2
...
【问题讨论】:
-
这是 IronPython 和您尝试匹配的 C# 语法吗?还是有什么不同?
-
@abarnert 我正在尝试匹配 VB。
-
谢谢。一般来说,将这些信息放在问题中会有所帮助——更重要的是,放置一个指向信息来源的链接。在这种情况下,这些都可能与您的问题无关,但它永远不会受到伤害。
-
“我认为我的问题可能是由于不同的函数创建了同一类的实例。”这应该不是问题,除非您只在一个实例上注册事件,而不是所有事件,或类似的东西。没有看到你的代码,我不知道你是不是。更一般地说,如果您向我们展示足以证明您的问题的 SSCCE,您将更容易找到您做错的地方,而不必猜测您可能做错了什么。
-
另外,在您最新的代码中,您只是引用了方法(例如,
a.class1method);你永远不会在任何地方给他们打电话 (a.class1method())。如果在您的真实代码中也是如此,它可以很容易地解释为什么事情没有按您预期的方式工作。
标签: python class events methods delegates