Yesterday, I upgraded to Zope 2.7.1. Because several of our extensions broke, I have to look into detail at the changed and I saw that the "hasattr geddon" was started. Unfortunately, in a way that I feel as not optimal and error prone... In the module I saw, "if hasattr(obj, attr)" has been replaced by "if getattr(obj, attr, None)". This is neither general (in the special case, it was at least not false), nor optimal (in the special case, the boolean check was very expensive) nor clear. I propose to implement the "hasattr geddon" instead by a monkey patch for Python's builtin "hasattr". This has the following advantages: * no code changes needed with the exception of the monkey patch installation * the code is as clear as possible * the implementation can be made efficient and safe * no danger of missed "hasattr" occurrences Disadvantages: * Occasionally, a "hasattr" call might become slightly more inefficient than necessary (when "hasattr" operates on an object which is not persistent). * the usual problems with monkey patches (if someone else tries to monkey patch "hasattr", too) The "hasattr" replacement in Python's "__builtin__" could look like: _marker = [] def hasattr(obj, attr): return getattr(obj, attr, _marker) is not _marker Opinions? -- Dieter