New submission from Mark Shannon <m...@hotpy.org>: classmethod_descriptor should either be uncallable or (better) accept the correct number of arguments. The classmethod_descriptor can be regarded as the Python object corresponding directly to the underlying C function, as well as a descriptor object. When called it should check that its first parameter is a subtype of the type in which it was declared, and then pass that as the 'self' parameter to the underlying C function. Currently it passes the type in which it was declared as its 'self' parameter, adding the remaining parameters.
This means that this fails: float.__dict__['fromhex'](float, "1") and this succeeds: float.__dict__['fromhex']("1") but it should be the other way around, otherwise it is impossible to pass a subtype as a parameter. There is no tests for calling classmethod_descriptors in the test suite. Attached patch includes tests and fixes the behaviour. ---------- components: Interpreter Core files: classmethoddescr_call.patch keywords: patch messages: 159687 nosy: Mark.Shannon priority: normal severity: normal status: open title: Calling a classmethod_descriptor directly raises a TypeError for wrong number of parameters. type: behavior versions: Python 3.3 Added file: http://bugs.python.org/file25423/classmethoddescr_call.patch _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue14699> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com