[Zope-dev] Re: hasattr implementation for Zope?
Jim Fulton
jim at zope.com
Fri May 27 13:10:29 EDT 2005
Paul Winkler wrote:
> On Fri, May 27, 2005 at 12:08:55PM -0400, Paul Winkler wrote:
>
>>On Fri, May 27, 2005 at 11:49:03AM -0400, Jim Fulton wrote:
>>
>>>BTW, I prefer to code things like this in the following way:
>>>
>>> def safe_hasattr():
>>> marker = object()
>>>
>>> def safe_hasattr(obj, attr):
>>> return getattr(obj, attr, marker) is not marker
>>>
>>> return safe_hasattr
>>>
>>> safe_hasattr = safe_hasattr()
>>>
>>>This way, there aren't any extra arguments or funny
>>>globals to confuse matters. (I've seen code that broke
>>>because people tried to reuse marker definitions accross
>>>modules.
>
>
> One more thought... as for "funny globals", it seems to me that a
> "private" global like __marker = [] results in cleaner code than either
> your approach or the keyword arg hack.
I don't agree. In my approach, there isn't a global to begin with.
...
> But of course we don't do it because accessing globals in a method that
> might be looped over is slow. Which, hopefully, will become a non-issue
> some day (PEP 267, 268, 280).
Note that in my version above, marker is a local rather than a global
and gets looked up at local-variable speed.
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 Zope-Dev
mailing list