While trying to understand, what the "bself= self.aq_explicit"
in "OFS.DTMLMethod.__call__" should do, I detected an unexpected
behaviour:

    usually, this "bself" acquires implicitly from
    its container (though not from its context)

More precisely:

    if "bself.aq_self" is itself an implicit acquisition
    wrapper, the "bself.aq_explicit" acquires implicitly
    from "bself.aq_self.aq_parent".

The following Python module demonstrates the behaviour:

-------------------------------------------------------
from Acquisition import Implicit

class C(Implicit): pass

b= C()
b.i= 0
b.d= C()
b.h= C()

e_bd= b.d.aq_explicit
try:
    e_bd.i 
    print 'e_bd implicitly acquired i'
except AttributeError: pass

e_bhd= b.h.d.aq_explicit
try:
    e_bhd.i 
    print 'e_bhd implicitly acquired i'
except AttributeError: pass
-------------------------------------------------------


At first, I thought this were a bug.
At second thought, however, it appears to be quite
natural, though unexpected:

    if o is self.__of__(parent), then
    getattr(o.aq_explicit,k) = getattr(self,k).__of__(o)

    If "self" is an implicit wrapper itself,
    then acquisition may be used to look up "k".



This implies, that the idiom

        <dtml-if "_.hasattr(o.aq_explicit,XXXX)">

cannot be used safely to test, whether "o" has attribute
XXXX itself (rather than acquired it).
We probably should have a standard function for this kind
of test.


Dieter

_______________________________________________
Zope maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope-dev )

Reply via email to