New submission from Piet Delport <[EMAIL PROTECTED]>: Short version: __get__/__set__/__delete__ attributes on descriptor objects (as opposed to their types) are treated inconsistently as part of the descriptor protocol: the documentation and support code includes them; the core implementation doesn't.
Example: class D(object): __get__ = lambda self, i, o: 'D' class C(object): d = D() d.__get__ = lambda i, o: 'd' d.__set__ = lambda i, v: 1/0 c = C() According to pydoc and inspect, and the description in the reference manual (section 3.4.2.3), d's __get__ and __set__ override D's: >>> inspect.isdatadescriptor(C.__dict__['d']) True >>> help(C) class C(__builtin__.object) | Data descriptors defined here: ... | d >>> type(c).__dict__['d'].__get__(c, type(c)) 'd' >>> type(c).__dict__['d'].__set__(c, 5) ZeroDivisionError: integer division or modulo by zero According to CPython, they have no effect: >>> c.d 'D' >>> c.d = 5; c.d 5 PEP 252 notes: "For speed, the get and set methods are type slots", which points to the CPython behavior being an intentional concession for performance. Should CPython respect descriptor object attributes, if reasonable performance can be maintained? Otherwise, should the documentation and support code be changed to ignore them? ---------- components: Interpreter Core, Library (Lib) messages: 65289 nosy: pjd severity: normal status: open title: Descriptor instance attributes not interpreted consistently type: behavior versions: Python 2.2, Python 2.2.1, Python 2.2.2, Python 2.2.3, Python 2.3, Python 2.4, Python 2.5, Python 2.6, Python 3.0 __________________________________ Tracker <[EMAIL PROTECTED]> <http://bugs.python.org/issue2605> __________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com