[Python-Dev] Why does Signature.from_function() have to check the type of its argument?

Stefan Behnel stefan_ml at behnel.de
Fri Feb 8 15:09:07 CET 2013


I'm wondering about the purpose of this code in

    if not isinstance(func, types.FunctionType):
        raise TypeError('{!r} is not a Python function'.format(func))

Is there any reason why this method would have to explicitly check the type
of its argument? Why can't it just accept any object that quacks like a

The reason why I ran into this is that I was trying to implement PEP 362
for Cython functions (which are not of Python function type
types.FunctionType), and these two lines currently force me to copy the
entire method body over into my code, just to build a Signature object from
introspection. I find that a really bad design.

Could this check please be removed completely? Or at least be changed to
use isfunction() instead, so that it becomes a bit more easy to monkey
patch it? (which is hard enough to explain to users already, BTW)

Oh, and that's for 3.3.1, please.


More information about the Python-Dev mailing list