python / python/mypy

(🐞) No error when assigning an non-concrete type object to a `Callable` variable matching the constructor (`Protocol`, `abstract`)

Aperta
#13,171 0 commenti 1 reazione 1 assegnatario Vedi su GitHub

@sobolevn ci sta già lavorando.

Dal 21/7/2022.

bug
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

from typing import Protocol, Callable
from abc import ABC, abstractmethod

class A(ABC):
    @abstractmethod
    def f(self) -> None: ...
    
class P(Protocol):
    a: int

ta1 = A
reveal_type(ta1)
reveal_type(ta1())  # error

ta2: type[A] = A  # error
reveal_type(ta2)
reveal_type(ta2())

ta3: Callable[[], A] = A  # no error
reveal_type(ta3)
reveal_type(ta3())


tp1 = P
reveal_type(tp1)
reveal_type(tp1())  # error

tp2: type[P] = P  # error
reveal_type(tp2)
reveal_type(tp2())

tp3: Callable[[], P] = P  # no error
reveal_type(tp3)
reveal_type(tp3())

playground

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.

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.