Index: src/zope/interface/interface.py =================================================================== --- src/zope/interface/interface.py (revision 83232) +++ src/zope/interface/interface.py (working copy) @@ -293,6 +293,10 @@ def changed(self, originally_changed): """We, or something we depend on, have changed """ + try: + del self._v_attrs + except AttributeError: + pass implied = self._implied implied.clear() Index: src/zope/interface/tests/test_interface.py =================================================================== --- src/zope/interface/tests/test_interface.py (revision 83232) +++ src/zope/interface/tests/test_interface.py (working copy) @@ -327,6 +327,29 @@ """ + +def description_cache_management(): + """ +There was a bug where the cache used by Specification.get() was not +cleared when the bases were changed. + + >>> class I1(Interface): + ... a = Attribute('a') + + >>> class I2(I1): + ... pass + + >>> class I3(I2): + ... pass + + >>> I3.get('a') is I1.get('a') + True + >>> I2.__bases__ = (Interface,) + >>> I3.get('a') is None + True + """ + + def test_suite(): from zope.testing import doctest suite = unittest.makeSuite(InterfaceTests)