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

PJ Eby pje at telecommunity.com
Fri Feb 8 19:46:08 CET 2013


On Fri, Feb 8, 2013 at 10:54 AM, Stefan Behnel <stefan_ml at behnel.de> wrote:
> Nick Coghlan, 08.02.2013 16:20:
>> On Sat, Feb 9, 2013 at 1:06 AM, Benjamin Peterson wrote:
>>> 2013/2/8 Stefan Behnel:
>>>> I'm wondering about the purpose of this code in
>>>> inspect.Signature.from_function():
>>>>
>>>> """
>>>>     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
>>>> function?
>>>
>>> The signature() function checks for types.FunctionType in order to
>>> call Signature.from_function(). How would you reimplement that?
>
> It should call isfunction() instead of running an explicit type check.

Isn't it possible now for an object to implement __instancecheck__ and
claim to be an instance of FunctionType, anyway?  (For that matter,
shouldn't there be some ABCs for this?)


More information about the Python-Dev mailing list