python / python/mypy

There should be an inverse of `Type`

Ouverte
#8,103 5 commentaires 9 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

feature
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

Specifically, it would be nice if there was a keyword Instance such that Instance[Type[_T]] is equivalent to _T

I'm thinking about this mostly in the context of working with metaclasses.

Suppose I have a class with a class method that creates an instance of the class written so it can be reused by subclasses. This can be typed in the following way:

_ThingInstance = TypeVar('_ThingInstance', bound='Thing')

class Thing():

    @classmethod
    def make_new(cls: Type[_ThingInstance]) -> _ThingInstance:
        return cls()

And this is automatically usable by subclasses.

What I want is an Instance type such that I can correctly type the same logic defined within a metaclass like so:

_ThingClass = TypeVar('_ThingClass', bound='MetaThing')

class MetaThing(type):

  def make_new(cls: _ThingClass) -> Instance[_ThingClass]:
      return cls()

As far as I can tell, there's no way to correctly annotate this

Guide de contribution

Ouvrir le guide de contribution

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 l’annotation proposée Instance[_ThingClass] et comparez-la au modèle Type[_ThingInstance] présenté. Définissez le comportement de l’inverse pour les méthodes de métaclasse et vérifiez les exemples avec une couverture de vérification de types ; le travail est considéré comme terminé lorsque les annotations demandées sont acceptées avec les types d’instance inférés attendus.

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
28/100

Recevez les nouvelles issues par e-mail

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