There should be an inverse of `Type`
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginnen Sie mit der vorgeschlagenen Instance[_ThingClass]-Annotation und vergleichen Sie sie mit dem gezeigten Type[_ThingInstance]-Muster. Definieren Sie, wie das Inverse sich für Metaklassenmethoden verhalten soll, und überprüfen Sie die Beispiele mit einer Abdeckung durch Typprüfung; als abgeschlossen gilt die Aufgabe, wenn die angeforderten Annotationen mit den beabsichtigten inferierten Instanztypen akzeptiert werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 28/100