Alias that is generic over a ParamSpec is not hashable when using a list as parameters_expression
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug report
Bug description:
This is slightly related to #124445, but a different issue, maybe it can be solved at the same time?
Consider the following code where [T] is a parameters_expression according to PEP 612. Similar to using Callable or using Generic[P] or Protocol[P] I would expect the following code to work and receive a hashable variable:
from typing import TypeVar
from collections.abc import Callable
type X[**P] = Callable[P, int]
T = TypeVar("T")
hash(X[[T]])
# ~~~~^^^^^^^^
# TypeError: unhashable type: 'list'
Cause:
The problem is that X[[T]].__args__ == ([T],) which cannot be hashed. I think the list should either be turned into a tuple. Either a nested one as its done for Generic and Protocol or joined like for Callable[P, str][[int]].__args__.
Discussion:
I've opened a parallel topic on discuss
CPython versions tested on:
3.13.0.rc2
Operating systems tested on:
Linux
EDIT: A thought, should this be changed for whole class in general?
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 le reproducteur de l’issue et comparez le comportement de l’alias ParamSpec avec les cas Generic, Protocol et Callable référencés. Lisez PEP 612, l’issue #124445 et la discussion liée pour déterminer si les paramètres de type liste doivent devenir des tuples imbriqués ou être regroupés. La tâche est terminée lorsque hash(X[[T]]) fonctionne sans liste non hachable tout en préservant les arguments attendus.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- backend
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100