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" <storch...@gmail.com
<mailto:storch...@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.
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/