object knows which object called it?

Aaron Brady castironpi at gmail.com
Mon Apr 6 13:04:56 EDT 2009


On Apr 6, 9:53 am, Reckoner <recko... at gmail.com> wrote:
> hi,
>
> I have the following problem: I have two objects, say, A and B, which
> are both legitimate stand-alone objects with lives of their own.
>
> A contains B as a property, so I often do
>
> A.B.foo()
>
> the problem is that some functions inside of B actually need A
> (remember I said they were both standalone objects), so I have to
> often do:
>
> A.B.foo_func(A)
>
> Which is kind of awkward.
>
> Is there some way that B.foo_func() could somehow know that it was
> called as a property of A in this way?
>
> Note that I'm looking for the calling object and NOT the calling
> function.
>
> Thanks in advance.

Hi Reckoner,

I believe this does what you want.  It's an advanced technique and not
available in all OO languages.

class ClsA( object ):
    def __init__( self ):
        self.inst= None
    def __get__( self, instance, owner ):
        self.inst= instance
        return self
    def submethA( self, arg ):
        print( 'submethA %r, instance %r'% ( arg, self.inst ) )

class ClsB( object ):
    A= ClsA( )
    def methA( self, arg ):
        print( 'methA %r'% arg )

b= ClsB( )
b.methA( 'this' )
b.A.submethA( 'that' )

#Output:
'''
methA 'this'
submethA 'that', instance <__main__.ClsB object...>
'''

There's a small discussion in another today's thread, 'group several
methods under an attribute'.



More information about the Python-list mailing list