On Fri, 28 Oct 2011 00:52:40 +0200, candide wrote: > Le 28/10/2011 00:19, Steven D'Aprano a écrit : >> >> What, you think it goes against the laws of physics that nobody thought >> to mention it in the docs?<wink> > > > No but I'm expecting from Python documentation to mention the laws of > Python ...
You seem to have missed my point. You said "I can't imagine" that the Python docs fail to mention that built-ins don't allow the addition of new attributes. I can, easily. The people writing the documentation are only human, and if they failed to mention it, oh well, perhaps they didn't think of it. This is hardly a surprise. Wanting to add arbitrary attributes to built-ins is not exactly an everyday occurrence. >>> But beside this, how to recognise classes whose object doesn't have a >>> __dict__ attribute ? >> >> The same way as you would test for any other attribute. >> >>>>> hasattr(42, '__dict__') >> False > > OK but I'm talking about classes, not instances : 42 has no __dict__ > attribute but, may be, 43 _has_ such attribute, who knows in advance ? > ;) True, it is theoretically possible that (say) only odd numbers get a __dict__, or primes, or the smallest multiple of seventeen larger than the natural logarithm of a googol (10**100). But it's a safe bet that nothing so arbitrary will happen. Dunder attributes ("Double UNDERscore") like __dict__ are reserved for use by Python, and __dict__ has known semantics. You can safely assume that either *all* instances of a type will have a __dict__, or *no* instances will have one. If some class violates that, oh well, your code can't be expected to support every badly-designed stupid class in the world. Also, keep in mind the difference between a *class* __dict__ and an *instance* __dict__. >>> hasattr(int, '__dict__') # Does the int class/type have a __dict__? True >>> hasattr(42, '__dict__') # Does the int instance have a __dict__? False -- Steven -- http://mail.python.org/mailman/listinfo/python-list