python / python/typing

Overlapping type

Ouverte
#2,154 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

topic: feature
Langage dominant
Python
Étoiles
1.8k
Forks
302
Merge moyen
23 h
PR mergées (30 j)
8

Description

This is an rough idea from the recent discussion of whether to use object/Any or _KT for arguments of certain methods like pop or __sub__. E.g.:

class MyPoppable[KT, VT]:
    def pop(self, x: X) -> VT: ...

What should X be? Using KT (or KT | None) finds type errors like the following:

poppable: MyPoppable[str]
poppable.pop(123)

But has a problem with overlapping types:

def foo(x: int | str):
    poppable.pop(x)

On the other hand, using object doesn't catch type errors like poppable.pop(123).

The solution would be able to specify that any partially overlapping type would be accepted:

class MyPoppable[KT, VT]:
    def pop(self, x: Overlapping[KT]) -> VT: ...

MyPoppable[str]().pop() would accept str, str | None, Literal["x"], str | int, etc., but not e.g. plain int.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par les exemples de types qui se chevauchent dans l’issue et examinez la discussion récente à laquelle ils font référence. Définissez la sémantique attendue pour un type Overlapping, notamment les unions, les littéraux et les types qui ne se chevauchent pas ; le travail est terminé lorsque le comportement et les règles de typage sont convenus.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
devtools
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.