Hello Jim, Jim Fulton wrote at 2008-1-7 15:15 -0500: > .... >> I think I understand the behavior -- and I think it is a >> "zope.interface" >> bug. > >No, it is intended behavior.
Why? > ... >> Under some circumstances "zope.interface" adds a "__provides__" >> descriptor >> to a class. The descriptor is implemented in >> "zope/interface/_zope_interface_coptimizations.c" and called >> "CPB_descr_get". >> >> While "__implements__" is inherited by derived classes, >> the inherited "__provides__" refuses to work for a derived class >> and raises "AttributeError: __provides__" instead, >> the AttriuteError, I observe.... > >That is intentional. If "__implements__" is inherited, why is "__provides__" not inherited? >> I will try to make my failure independent of "ManagableIndex" >> and then file a bug report. > > >I'm unclear why this caused a problem for you. You never said, afaict, >what actually broke for you. What expectation did you have that is >unsatisfied? "inspect" does no longer work reliably. "inspect.getmembers" and "inspect.classify_class_attrs" require that for each "name" in "dir(cls)" "getattr(cls, name)" does not raise an exception. This fails for classes magically stuffed with a "__provides__" descriptor. As a consequence, "pydoc" (which sits on top of inspect) fails -- and therefore "dm.zdoc". >My main gripe with the way this works is that classes get mutated. If >I ever redo this someday, I'd use a data structure external to the >classes. Modifying the classes was a mistake. Yes. That, too, would have avoided the bug. -- Dieter _______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )