Douglas Raillard <douglas.raill...@arm.com> added the comment:
I did hit the issue while porting a tool to Python 3.9: https://github.com/ARM-software/lisa/pull/1585/commits/a4cd3aa1ad339ebfe59cc9e2ae290bb3788c900d It basically infers valid Python expressions from type annotations (some sort of inverse type checker) and run them while serializing all intermediate subexpressions for debugging. This allows a whole test suite to be plain classes and functions (usable out of context) to be assembled into "pipelines" without extra user work. The reason I ran into that problem are: 1. I'm scanning whole modules for annotations, so it is exposed to lots of things 2. In order to be able to infer expressions, it has to augment existing annotations when it is unambiguous. In our case, since __new__ is more or less a classmethod (i.e. it takes the class as first argument even if strictly speaking it's a staticmethod), it added an annotation with the class name (extracted from __qualname__). It implements PEP563 to evaluate the annotions, which describes how to get the globals for a function and class and that they can be fed to eval(). Using typing.get_type_hints() is not really possible since annotations need to be augmented, and fancy type hints like Optional are unusable for my purpose since there typing.get_args() was only added to Python 3.8 (I need to support >= 3.6). Maybe an alternative would be to use a module-level types.MappingProxyType instance ? This way there is no extra object created for each namedtuple and since it's read-only it should be as safe as None. ---------- versions: +Python 3.9 -Python 3.10 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue43102> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com