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

Reply via email to