False negative for restricted self in subclass

Aperta
#7,861 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
python
Ambito
devtools

Direzione di ricerca

Inizia riproducendo l’esempio nell’issue, poi leggi il lavoro esplicito sul self-type in PR 7860 e il caso di ereditarietà multipla nell’issue 7724. La correzione dovrebbe rifiutare coerentemente questo uso non sicuro delle sottoclassi e coprire il comportamento corrispondente dell’ereditarietà multipla senza duplicare la logica.

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

Descrizione

bug priority-1-normal topic-inheritance topic-self-types

This currently passes, but the code is unsafe:

from typing import TypeVar, Generic

T = TypeVar('T')

class Base(Generic[T]):
    def __init__(self, item: T) -> None:
        self.item = item
    def foo(self) -> None:
        pass

class Sub(Base[T]):
    def foo(self: Sub[str]) -> None:
        self.item + 'no'

# This is why the above is unsafe.
a: Base[int] = Sub(0)
a.foo()

On one hand it is a very rare situation, on the other hand in view of making explicit self-types a more "official" feature (see https://github.com/python/mypy/pull/7860) we might want to fix this.

Also it would be great to fix this in a consistent way, so that the fix also works for same issue with multiple inheritance without code duplication (see https://github.com/python/mypy/issues/7724).

Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Merge medio
1g 18h
PR unite (30g)
54

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.

Altre issue di python/mypy

Tutte le issue di python/mypy

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.