When DispatchWithEvents is used a new object is returned that (according to
the code on sourceforge
http://pywin32.cvs.sourceforge.net/pywin32/pywin32/com/win32com/client/__ini
t__.py?revision=1.34&view=markup)
216 It is important to note that the returned instance is not a direct
217 instance of the user_event_class, but an instance of a temporary
218 class object that derives from three classes:
219 * The makepy generated class for the COM object
220 * The makepy generated class for the COM events
221 * The user_event_class as passed to this function.
The responsible code appears to be this:
264 result_class = new.classobj("COMEventClass", (disp_class,
events_class, user_event_class), {"__setattr__" : _event_setattr_})
265 instance = result_class(disp._oleobj_) # This only calls the first
base class __init__.
266 events_class.__init__(instance, instance)
267 if hasattr(user_event_class, "__init__"):
268 user_event_class.__init__(instance)
269 return EventsProxy(instance)
Two questions:
Question 1: Is it safe in the __init__ code for the user event class to
execute any methods or reference any attributes of the disp_class? In
particular, I am concerned about what might happen if a method in disp_class
was referenced that caused an event that would be handled by a method in
user_event_class. My general sense is that this is probably NOT a good
thing to do, but it turns out that it would be useful in the IE automation
class I'm working on so I thought I'd at least ask before moving on to some
other, presumably saner, approach.
Question 2: If the user_event_class overrides a disp_class method how does
one reference the disp_class method. In particular for IE if:
class IE_Events(object):
... bunch of code ...
def Navigate2(self, url,
flags=0, targetFrameName="_self",
postData="", headers="",
errorFlag = True, message = None ):
... some code ...
... Now how do I reference the Navigate2 method in disp_class? ...
... How do I KNOW what disp_class is? ...
Examination of the makepy output suggest that it is likely that disp_class
in this instance is IWebBrowser2 but how can I KNOW that it is not some
other class (for example IWebBrowser)?
Thanks for any help.
Regards,
Richard
_______________________________________________
Python-win32 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-win32