Automatically find the source of a method invocation?
Bengt Richter
bokr at oz.net
Tue Sep 3 15:00:26 EDT 2002
On 30 Aug 2002 19:12:47 GMT, Robb Shecter <rs at onsitetech.com> wrote:
>Hi,
>
>I'm making a small publish/subscribe module for an application, and I
>want to have a reference to the source object that's sent a message.
>
>I was wondering if there was a way of determining it without the object
>having to explicitly put a ref to itself in the method, ala:
>
>(What I want to avoid:)
>sendMessage(source=self, message=myMessage)
>
>Any ideas?
>
If an object had to get a connection object to participate (e.g., pso = PS(...) ),
then that instance would have a self. It wouldn't be the using object's self, but
would be 1:1 associated and might serve your purpose. If not, you could have the
connection object cache the using object's self. E.g.,
class PS:
def __init__(self, userself, *etc):
self._userself = userself
self.etc = etc
def sendMessage(self, msg):
# do whatever with self (PS instance)
# and/or use self._userself as needed
...
then
pso = PS(self, ...)
...
and then
pso.sendMessage(myMessage)
really calls PS.sendMessage(pso, myMessage), and you can define sendMessage to do
with either self as you please.
You could also bind an alias like
mySend = pso.sendMessage
and then write
mySend(myMessage)
noting that mySend is then a bound method and the pso instance will be passed implicitly
to PS.sendMessage.
Regards,
Bengt Richter
More information about the Python-list
mailing list