This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: __name__ not available for classes in typing module
Type: behavior Stage: resolved
Components: Documentation Versions: Python 3.10, Python 3.9
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: docs@python Nosy List: Gabriel Tremblay, docs@python, gvanrossum, kj, levkivskyi, pablogsal, uriyyo
Priority: normal Keywords:

Created on 2018-08-17 17:21 by Gabriel Tremblay, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Messages (6)
msg323663 - (view) Author: Gabriel Tremblay (Gabriel Tremblay) Date: 2018-08-17 17:21
Types under the typing module used to behave like other python classes regarding the __name__ attribute before Python 3.7. The behavior seems to have changed to a non-standard way.

Py3.6 
>>> from typing import List
>>> dir(List)
['__abstractmethods__', '__add__', '__args__', '__class__', '__contains__', '__delattr__', '__delitem__', 
'__dir__', '__doc__', '__eq__', '__extra__', '__format__', '__ge__', '__getattribute__', '__getitem__', '_
_gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len_
_', '__lt__', '__module__', '__mul__', '__ne__', '__new__', '__next_in_mro__', '__orig_bases__', '__origin
__', '__parameters__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__
', '__setitem__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '__tree_hash__', '_abc_cache',
 '_abc_negative_cache', '_abc_negative_cache_version', '_abc_registry', 'append', 'clear', 'copy', 'count'
, 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> List.__name__
'List'


Py3.7:
>>> from typing import List
>>> dir(List)
['__args__', '__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__instancecheck__', '__le__', '__lt__', '__module__', '__mro_entries__', '__ne__', '__new__', '__origin__', '__parameters__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasscheck__', '__subclasshook__', '__weakref__', '_inst', '_name', '_special', 'copy_with']
>>> List.__name__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.7/typing.py", line 699, in __getattr__
    raise AttributeError(attr)
AttributeError: __name__
>>> List._name
'List'
msg323766 - (view) Author: Pablo Galindo Salgado (pablogsal) * (Python committer) Date: 2018-08-19 19:09
Bisecting this issue revealed that this happened on commit 

d911e40e788fb679723d78b6ea11cabf46caed5a is the first bad commit
commit d911e40e788fb679723d78b6ea11cabf46caed5a
Author: Ivan Levkivskyi <levkivskyi@gmail.com>
Date:   Sat Jan 20 11:23:59 2018 +0000

    bpo-32226: PEP 560: improve typing module (#4906)

    This PR re-designs the internal typing API using the new PEP 560 features.
    However, there are only few minor changes in the public API.


The reason seems that now all of the types are created using `_GenericAlias` that does not copy the `__name__` attribute.
msg323771 - (view) Author: Ivan Levkivskyi (levkivskyi) * (Python committer) Date: 2018-08-19 20:48
Oh I just re-read my comment and there are so many typos that I will write a new one, sorry.
msg323772 - (view) Author: Ivan Levkivskyi (levkivskyi) * (Python committer) Date: 2018-08-19 20:49
This is an intentional change. It would be a bad idea to use `__name__` instead of what is currently `_name`, because semantics is subtly different. Also the fact that types in typing module used to be actual class objects was an implementation detail (also typing module is still provisional).

The problematic part here is that special types and generic type aliases are still documented as _classes_ in https://docs.python.org/3.7/library/typing.html, I think this needs to be updated. (Plus we should add an explicit note somewhere in the docs that static types and runtime classes should not be confused.)
msg398765 - (view) Author: Yurii Karabas (uriyyo) * (Python triager) Date: 2021-08-02 13:29
I believe we can close this issue.

It has been fixed in scope of this issue - https://bugs.python.org/issue44524
msg398774 - (view) Author: Ken Jin (kj) * (Python committer) Date: 2021-08-02 14:19
Agree with Yurii. This is no longer an issue in 3.10 onwards. Thanks to Yurii for providing the fix in the other issue.
History
Date User Action Args
2022-04-11 14:59:04adminsetgithub: 78603
2021-08-02 14:19:41kjsetstatus: open -> closed

nosy: + kj
messages: + msg398774

resolution: fixed
stage: resolved
2021-08-02 13:29:40uriyyosetnosy: + uriyyo
messages: + msg398765
2020-09-17 23:01:19iritkatrielsetassignee: docs@python

nosy: + docs@python
components: + Documentation, - Library (Lib)
versions: + Python 3.9, Python 3.10, - Python 3.7, Python 3.8
2018-08-19 20:49:45levkivskyisetmessages: - msg323770
2018-08-19 20:49:34levkivskyisetmessages: + msg323772
2018-08-19 20:48:04levkivskyisetmessages: + msg323771
2018-08-19 20:45:24levkivskyisetmessages: + msg323770
2018-08-19 20:26:22serhiy.storchakasetnosy: + gvanrossum, levkivskyi

components: + Library (Lib), - Interpreter Core
versions: + Python 3.8
2018-08-19 19:09:12pablogsalsetnosy: + pablogsal
messages: + msg323766
2018-08-17 17:21:06Gabriel Tremblaycreate