Quantcast

[issue14699] Calling a classmethod_descriptor directly raises a TypeError for wrong number of parameters.

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[issue14699] Calling a classmethod_descriptor directly raises a TypeError for wrong number of parameters.

STINNER Victor

New submission from Mark Shannon <[hidden email]>:

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 <[hidden email]>
<http://bugs.python.org/issue14699>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/lists%2B1322467933539-512619%40n6.nabble.com

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[issue14699] Calling a classmethod_descriptor directly raises a TypeError for wrong number of parameters.

STINNER Victor

Mark Shannon <[hidden email]> added the comment:

New patch in response to review.

----------
Added file: http://bugs.python.org/file25431/classmethoddescr_call.patch

_______________________________________
Python tracker <[hidden email]>
<http://bugs.python.org/issue14699>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/lists%2B1322467933539-512619%40n6.nabble.com

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[issue14699] Calling a classmethod_descriptor directly raises a TypeError for wrong number of parameters.

STINNER Victor
In reply to this post by STINNER Victor

Roundup Robot <[hidden email]> added the comment:

New changeset eab5120cc208 by Benjamin Peterson in branch '3.2':
fix calling the classmethod descriptor directly (closes #14699)
http://hg.python.org/cpython/rev/eab5120cc208

New changeset e1a200dfd5db by Benjamin Peterson in branch 'default':
merge 3.2 (#14699)
http://hg.python.org/cpython/rev/e1a200dfd5db

New changeset 6484f5a51285 by Benjamin Peterson in branch '2.7':
fix calling the classmethod descriptor directly (closes #14699)
http://hg.python.org/cpython/rev/6484f5a51285

----------
nosy: +python-dev
resolution:  -> fixed
stage:  -> committed/rejected
status: open -> closed

_______________________________________
Python tracker <[hidden email]>
<http://bugs.python.org/issue14699>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/lists%2B1322467933539-512619%40n6.nabble.com

Loading...