New submission from Adam Paszke <adam.pas...@gmail.com>: Hi everyone,
I have a module that needs to inspect type annotations on a few functions. One of the types I need to special case on is typing.Tuple, and I used code like this to detect it: if getattr(annotation, '__origin__', None) == typing.Tuple: ... else: ... This was based on the comment from the typing module (Lib/typing.py:609) that specified this particular invariant on the __origin__ attribute: > __origin__ keeps a reference to a type that was subscripted, e.g., Union[T, int].__origin__ == Union; Everything worked just fine until I checked it on the alpha release of Python 3.7 in my CI. Turns out, that in that release we have typing.Tuple[str, int].__origin__ == tuple and not (which is the case in e.g. 3.6) typing.Tuple[str, int].__origin__ == typing.Tuple I know this is not a documented attribute, so it can change, but I wanted to highlight that it's either a regression, or the comment will need to be updated, so people won't try to depend on that. ---------- components: Library (Lib) messages: 316127 nosy: apaszke priority: normal severity: normal status: open title: __origin__ invariant broken type: behavior versions: Python 3.7, Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue33420> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com