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