[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