[Zope] Acquisition question

Garito garito at sistes.net
Tue Jan 18 23:30:01 EST 2005


Dieter Maurer escribió:

>Garito wrote at 2005-1-18 09:12 +0100:
>  
>
>>...
>>I would like to execute something like:
>>
>>object.Render(args)
>>
>>where:
>>object is an object inside a folder inside my product
>>Render is the product's Render method acquired by the object
>>
>>the response is the id of my product instead the id of the object as 
>>expected
>>
>>Is this possible?
>>    
>>
>
>No, at least not with acquisition:
>
>  When you acquire a method, you change its "self".
>
>  This is necessary because the "self" of a method must
>  be an instance of the class defining the method.
>  The acquiring object usually does fulfill this requirement.
>
>  
>
>>How?
>>    
>>
>
>There are several ways:
>
> * you use an ExternalMethod or PythonScript for "Render"
>   rather than a standard method definition
>
> * you make "Render" an object with a "__call__" method.
>   In its "__call__" it can access the acquisition context
>   (your "object" above) with "self.aq_parent".
>   The product instance can be accessed with "self.aq_inner.aq_parent".
>
>   That this works, the "Render" object's class must inherit
>   from "Acquisition.[Im|Ex]plicit" and your product class
>   must inherit at least from "ExtensionClass.Base" (better
>   "Acquisition.[Im|Ex]plicit").
>
>   Note that the option above is a specialization of this one
>   (where you use predefined object classes with the required
>   features).
>
> * You "reuse" the "Render" method of your product class
>   in your object via:
>
>      class MyObject(...):
>        Render = MyProduct.Render.im_func
>  
>
>>Thanks a lot!
>>
>>
>>    
>>
>
>  
>
Thank you Dieter
I think I choose to obtain a python script and the use the context 
object (instead of self)

See u!



More information about the Zope mailing list