[Zope3-dev] Re: tagged value handling inconsequent for interface
methods and attributes and interfaces themself
Jim Fulton
jim at zope.com
Wed Oct 19 10:10:31 EDT 2005
Philipp von Weitershausen wrote:
> Grégoire Weber wrote:
>
>>while modeling the external API of an application I'd like to use the
>>tagged value feature of the interface implementation.
>>
>>It seems to me that handling tagged values is implemented inconsequently.
>>
>>It would be nice if tagging attributes and interfaces would look the
>>same as tagging methods:
>>
>>in the interface definition:
>>
>> meth.tag = 'tagged' # interrestingly ``meth.setTaggedValue`` doesn't work
>
>
> This is, for example, useful for setting the precondition on __setitem__
> method defintions for containers::
>
> class IRecipeContainer(IContainer):
> def __setitem__(name, object):
> """Add a recipe"""
> __setitem__.precondition = ItemTypePrecondition(IRecipe)
>
> Having to use setTaggedValue would be a lot less syntactic sugar for
> nothing.
It's not for nothing. It's for separation of namespaces.
(Tagged values are a lot like annotations in that respect.)
Of course, the prefered way to express the above now is:
zope.app.container.contstraints.contains(IRecipe)
> API inconsistencies usually have no specific reasons other than
> bitrotting, I guess.
Yeah, IOW, sounds like a bug.
> I would say that a 'setTaggedValue' method is a bit unpythonic (it
> actually feels quite Javaish).
This is a very old api, going way back before z3.
> I realize that the concept of tagged
> values is well known from UML, that doesn't mean we can use pythonic
> idioms for it though. I personally would prefer using the
> __getitem__/__setitem__ protocol for this, but interfaces unfortunately
> already use this for accessing interface members (e.g. IRecipe['name']).
> I wish they would use the __getattr__ protocol (e.g. IRecipe.name).
> Maybe it's not too late to change this, though it would be hard. It
> would also make IInterface really tricky (what would
> IInterface.implementedBy be?).
I don't think there is really a need to change this. If I was going
to change this, I'd probably use the annotations approach.
Jim
--
Jim Fulton mailto:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the Zope3-dev
mailing list