[Zope] How to do...

Dieter Maurer dieter at handshake.de
Wed Oct 18 14:23:05 EDT 2006


Garito wrote at 2006-10-18 16:15 +0200:
> ...
>How can I control the way an attribute of a product is readed? 
>__getattr__? __getattribute__?

A "product" is an extension mechanism for Zope. Usually, a
"product" does not have attributes (you are interested in).

But inside your product you may have defined classes
instances of which you place into the Zope hierarchy
(<http://www.dieter.handshake.de/pyprojects/zope/book/chap3.html>
speaks about site building objects).

The standard Python way to access their attributes ("__getattr__"
and "__getattribute__") will work but has caveats: It is *very* easy
to create infinite loops with it and their "self" with not be
acquisition wrapped.

The Zope specific safer way is to implement "__bobo_traverse__".
Both the publisher as well as "[un]restrictedTraverse" (which
is internally used by TALES path expressions) use "__bobo_traverse__"
when defined. However, Python's "getattr" will not use it.



-- 
Dieter


More information about the Zope mailing list