abstract class shouldn't be considered Callable
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- Ø Merge
- 1 T. 18 Std.
- Gemergte PRs (30 T.)
- 54
Beschreibung
Bug Report
An abstract class fits the typing for Callable.
To Reproduce
import abc
from typing import Callable
class A(abc.ABC):
@abc.abstractmethod
def m(self) -> None:
...
class C(A):
def m(self) -> None:
pass
def f() -> A:
return C()
def t(x: Callable[[], A]) -> None:
x()
def main() -> None:
t(f)
t(C)
t(A) # should give typing error - A is not callable because it can't be instantiated
A() # mypy correctly reports that A can't be instantiated
if __name__ == "__main__":
main()
Expected Behavior
mypy should report a typing error if an abstract class is put where a Callable should go
Actual Behavior
mypy doesn't report any error if an abstract class is put where a Callable should go
Your Environment
- Mypy version used: 0.910
- Python version used: 3.8.10
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
Führe zunächst das bereitgestellte Python-Beispiel mit der gemeldeten mypy-Version aus und bestätige, dass die Diagnose für t(A) fehlt. Verfolge anschließend, wie mypy die Kompatibilität von Callable und die Instanziierung abstrakter Klassen prüft, und füge Tests hinzu, die zeigen, dass eine abstrakte Klasse abgelehnt wird, während f und C weiterhin akzeptiert werden. Erledigt ist die Aufgabe, wenn der erwartete Typing-Fehler für A gemeldet wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- compilers, devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100