[Python-ideas] PEP proposal: unifying function/method classes

Antoine Pitrou solipsis at pitrou.net
Thu Mar 22 19:36:26 EDT 2018


On Thu, 22 Mar 2018 21:34:44 +0100
Jeroen Demeyer <J.Demeyer at UGent.be> wrote:
> Dear python-ideas,
> 
> I would like to draft a PEP to change the implementation of functions 
> and methods in CPython. The idea for this PEP come from a discussion on 
> https://bugs.python.org/issue30071
> 
> The core idea of the PEP is to reorganize classes for functions and 
> methods with the goal of removing the difference between 
> functions/methods implemented in C and functions/methods implemented in 
> Python.
> 
> Currently, CPython has two different function classes: the first is 
> Python functions, which is what you get when defining a function with 
> def or lambda. The second is built-in functions such as len, isinstance 
> or numpy.dot. These are implemented in C.
> 
> These two classes are completely independent with different 
> functionality. For example, built-in functions do not have __get__ and 
> therefore cannot be used as methods. And only Python functions support 
> introspection like inspect.getargspec or inspect.getsourcefile.
> 
> This is a problem for projects like Cython that want to implement 
> functions in C but still want to offer functionality close to Python 
> functions. In Cython, this was solved by inventing a new function class 
> called cyfunction. Unfortunately, this new function class creates 
> problems, for example the inspect module does not recognize such 
> functions as being functions (this is the bug mentioned above) and the 
> performance is worse (CPython has specific optimizations for calling 
> built-in functions).
> 
> When you look at methods, the inconsistency increases: On the one hand, 
> the implementation of built-in functions and bound methods is very 
> similar but built-in unbound methods are different. On the other hand, 
> Python functions and unbound methods are identical but bound methods are 
> different.
> 
> Do you think that it makes sense to propose a PEP for this?

It does make sense, since the proposal sounds ambitious (and perhaps
impossible without breaking compatibility).

Regards

Antoine.




More information about the Python-ideas mailing list