object knows which object called it?
Duncan Booth
duncan.booth at invalid.invalid
Mon Apr 6 13:09:55 EDT 2009
Reckoner <reckoner 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.
>
You can do something like this if you really want (Zope does), but it is
complex and confusing (Zope 3 has dropped implicit acquisition as being a
bad idea). Have a look at
http://www.zope.org/Documentation/Books/ZDG/current/Acquisition.stx
which has the following example:
import ExtensionClass, Acquisition
class C(ExtensionClass.Base):
color='red'
class A(Acquisition.Implicit):
def report(self):
print self.color
a=A()
c=C()
c.a=A()
c.a.report() # prints 'red'
d=C()
d.color='green'
d.a=a
d.a.report() # prints 'green'
a.report() # raises an attribute error
and what you actually asked for: in the example above 'c.a.aq_parent is c'
If you want to confuse yourself you can install Zope's ExtensionClass and
Acquisition modules from PyPi:
http://pypi.python.org/pypi/Acquisition/2.12.0a1
More information about the Python-list
mailing list