[Python-ideas] Make functions, methods and descriptor types living in the types module
Steve Dower
steve.dower at python.org
Thu Jan 11 23:45:40 EST 2018
I certainly have code that joins __module__ with __name__ to create a
fully-qualified name (with special handling for those builtins that are
not in builtins), and IIUC __qualname__ doesn't normally include the
module name either (it's intended for nested types/functions).
Can we make it visible when you import the builtins module, but not in
the builtins namespace?
Cheers,
Steve
On 12Jan2018 0941, Victor Stinner wrote:
> I like the idea of having a fully qualified name that "works" (can be
> resolved).
>
> I don't think that repr() should change, right?
>
> Can this change break the backward compatibility somehow?
>
> Victor
>
> Le 11 janv. 2018 21:00, "Serhiy Storchaka" <storchaka at gmail.com
> <mailto:storchaka at gmail.com>> a écrit :
>
> Currently the classes of functions (implemented in Python and
> builtin), methods, and different type of descriptors, generators,
> etc have the __module__ attribute equal to "builtins" and the name
> that can't be used for accessing the class.
>
> >>> def f(): pass
> ...
> >>> type(f)
> <class 'function'>
> >>> type(f).__module__
> 'builtins'
> >>> type(f).__name__
> 'function'
> >>> type(f).__qualname__
> 'function'
> >>> import builtins
> >>> builtins.function
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> AttributeError: module 'builtins' has no attribute 'function'
>
> But most of this classes (if not all) are exposed in the types module.
>
> I suggest to rename them. Make the __module__ attribute equal to
> "builtins" and the __name__ and the __qualname__ attributes equal to
> the name used for accessing the class in the types module.
>
> This would allow to pickle references to these types. Currently this
> isn't possible.
>
> >>> pickle.dumps(types.FunctionType)
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> _pickle.PicklingError: Can't pickle <class 'function'>: attribute
> lookup function on builtins failed
>
> And this will help to implement the pickle support of dynamic
> functions etc. Currently the third-party library that implements
> this needs to use a special purposed factory function (not
> compatible with other similar libraries) since types.FunctionType
> isn't pickleable.
More information about the Python-ideas
mailing list