On Sat, Feb 9, 2013 at 12:09 AM, Stefan Behnel <stefan...@behnel.de> wrote:
> Hi,
>
> 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?

Primarily because the expected approach for alternative objects that
want to expose signature in 3.3 was for them to provide the
__signature__ attribute directly, rather than providing the far
messier grab bag of eclectic attributes exposed by native Python
functions (there's also a tentative plan kicking around somewhere to
have a string version for 3.4, so we can start doing something useful
with functions implemented in C).

I suspect the specific reason for the lack of ducktyping is merely to
provide a nice error message when people call the class method rather
than the module level function, so removing the check sounds
reasonable to me.  The ultimate decision will be Georg's as RM,
though. Probably the quickest way to get a decision from him would be
a tracker issue set to release blocker, with a patch removing those
two lines and a test confirming that non-functions with the right
attributes are correctly accepted (e.g. by copying the attributes from
a real function to a custom object and checking
Signature.from_function gives the same answer).

Cheers,
Nick.

-- 
Nick Coghlan   |   ncogh...@gmail.com   |   Brisbane, Australia
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to