The types of `builtins.locals` and `types.FrameType.f_locals` aren't correct
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 5.1k
- Forks
- 2.1k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 82
Description
builtins.locals and types.FrameType.f_locals are currently typed with dict[str, Any], which is incorrect:
-
Counterexample:
from collections import UserDict class A(type): @classmethod def __prepare__(cls, name, bases): return UserDict() def __new__(mcs, name, bases, namespace, /, **kw): return super().__new__(mcs, name, bases, dict(namespace), **kw) class B(metaclass=A): assert isinstance(locals(), dict) # AssertionError -
Counterexample as a consequence of PEP 667 (Python >= 3.13):
from inspect import currentframe def f(): print(type(currentframe().f_locals)) # <class 'FrameLocalsProxy'> (runtime type is `_collections_abc.framelocalsproxy`; not in `.pyi` stubs yet) assert isinstance(currentframe().f_locals, dict) # AssertionError f()
However, I'm not sure what the actual type should be. From what I can gather, the type should implement a mapping interface, with a few (but not all?) MutableMapping methods (PEP 667 describes what these mutable mapping methods are for FrameType.f_locals, but I'm not sure what's exactly expected of builtins.locals()).
In addition, collections.abc.Mapping and collections.abc.MutableMapping themselves are unsuitable, because they're nominal types, although this could be fixed by defining a Protocol which looks like a Mapping.
So, what should the types of builtins.locals and types.FrameType.f_locals be?
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par les déclarations référencées dans stdlib/builtins.pyi et stdlib/types.pyi, puis lisez la description de FrameType.f_locals dans PEP 667 et comparez-la aux exemples d’exécution du issue. Le travail sera considéré comme terminé lorsque des types compatibles auront été déterminés et documentés pour locals() et f_locals, notamment pour déterminer si un protocole de mappage structurel est nécessaire.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- tooling
- Type d'issue
- Bug
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 25/100