python / python/mypy

Support `types.new_class`

Aperta
#11,302 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

feature priority-2-low
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

Feature

Currently, types.new_class is not supported.

Source: https://github.com/python/cpython/blob/9fa930dd4859441d36e39ec6db1a6ebdc046d5b1/Lib/types.py#L69
Typeshed: https://github.com/python/typeshed/blob/ca983cd319cb58b0a8fa3a086fad5e75332e0450/stdlib/types.pyi#L344-L359

Pitch

It creates inconsistency with CPython for mypy:
Снимок экрана 2021-10-09 в 11 32 38

Example:

from types import new_class

X = new_class('X', (int,))

def sum_two(a: X, b: X) -> X:
    return a + b

print(sum_two(X(2), X(3)))

There are two ways we can do this:

  1. Via plugin get_dynamic_class_hook(), which looks like it was created for this case! (my preference)
  2. Via custom semanal_new_class helper

Any tips / preferences from maintainers here?

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia confrontando le definizioni referenziate di new_class in CPython Lib/types.py e typeshed types.pyi. Poi analizza l'entry point get_dynamic_class_hook() di mypy e l'helper semanal_new_class proposto. Il lavoro è completato quando l'esempio fornito supera il type-checking in modo coerente con il comportamento di CPython e l'approccio di implementazione è stato definito.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
25/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.