Object retrieval syntax
Hi, I noticed that if an object's id begins with a numeric character then the syntax to retrieve the object must be *container['1']* otherwise the syntax to retrive the item may be either *container['myID']* or *container.myID*. Why is this? Thanks, Mike
Michael Long wrote:
I noticed that if an object's id begins with a numeric character then the syntax to retrieve the object must be *container['1']* otherwise the syntax to retrive the item may be either *container['myID']* or *container.myID*. Why is this?
This is not quite accurate; standard Zope Folders support two methods of object access which are similar, but not identical. The first is attribute access, which is what you use when you write "container.myID" or "getattr(container, 'myID')". Python's syntax requires that the attribute name in the first expression be a valid identifier (i.e. start with a letter or underscore, etc). In the second expression, the attribute's name is provided as a string literal, so only Zope's object naming constraints apply. In either case, if the named attribute does not exist in the container, and the container supports acquisition (which Folders do), then Zope will attempt to fetch the attribute from the container's context. The second is item access, as in "container['myID']". As with the "getattr()" form of attribute access, the item key can be any valid Zope object name. *Unlike* attribute access, item access will not perform implicit acquisition if the item key is not found in the container. Cheers, Evan @ 4-am
participants (2)
-
Evan Simpson -
Michael Long