Hi, On Thu, 2008-10-16 at 18:45 +0200, Dieter Maurer wrote:
I do not follow your argumentation: An attribute it not there because there is a descriptor, it is only there when the descriptor provides a value: I have seen descriptors in Zope3 that are only there to remove an attribute that might otherwise be inherited -- by unconditionally raising "AttributeError". In this case, the existance of the particular descriptor precisely means that the attribute is missing.
Moreover, when an attribut is implemented by a descriptor, I am very much interested that its "__get__" does not raise an exception. If this is not the case, I would like to be warned early; if possible even by a unit test.
Then again, verifyObject is a *very* light way to spot simple errors. IMHO attributes and methods aren't that different in Python, as "using" both may result in exceptions. However, implementing a method of an interface doesn't check whether the method actually executes correctly -- only whether an implementation is present. Arguably, the check for an attribute would be sufficient if it checked whether an attribute implementation is around -- either by a simple attribute value or a descriptor providing that. There's another method: verifyClass. This definitely only checks the presence of an implementation. Thomas: There is an issue that we regularly see with verifyClass that makes us instanciated the objects and then use verifyObject. I don't remember what it was right now. Do you? Christian -- Christian Theune · ct@gocept.com gocept gmbh & co. kg · forsterstraße 29 · 06112 halle (saale) · germany http://gocept.com · tel +49 345 1229889 7 · fax +49 345 1229889 1 Zope and Plone consulting and development