Wie kann ich eine Methode eingeben, die eine Unterklasse einer Basisklasse akzeptiert?Python

Python-Programme
Anonymous
 Wie kann ich eine Methode eingeben, die eine Unterklasse einer Basisklasse akzeptiert?

Post by Anonymous »

Ich habe Probleme beim Eingeben von Unterklassen einer Basisklasse. Dann habe ich eine Datenbankklasse, die Sammlungen dieser Tabellen verwaltet. < /P>
Der folgende Code funktioniert zur Laufzeit einwandfrei. Wenn ich jedoch versuche, die Methoden in der Datenbankklasse unter Verwendung von Tabelle als Typanmerkungen einzugeben, stieß ich beim Übergeben einer Unterklasse (z. B. Enten) auf Probleme ein. Die Typen brechen und MyPy beschwert sich.#!/usr/bin/env python3
from collections.abc import Callable, Iterable, Mapping, Sequence
from dataclasses import dataclass
from typing import Any, Self, TypeVar

# _Table = TypeVar("_Table", bound="Table") str:
return cls.__name__.lower()

@dataclass
class Database:
records: Mapping[str, Sequence[Table]]

def filter(
self, table: type[Table], _filter: Callable[[Table], bool]
) -> Iterable[Table]:
yield from (i for i in self.records[table.get_name()] if _filter(i))
# USING cast(T) here kind of works but i think is kind a cheat.

@dataclass
class Ducks(Table):
name: str
age: int

if __name__ == "__main__":

records = {
"ducks": [
Ducks(name="Patinhas", age=104),
Ducks(name="Donald", age=30),
Ducks(name="Huguinho", age=12),
Ducks(name="Zezinho", age=12),
Ducks(name="Luizinho", age=12),
]
}

db = Database(records)
f: Callable[[Ducks], bool] = lambda t: t.age < 100 #

MyPy Lint: Ex.Py 46 37 Fehlerarg-Argument "_filter" zum "Filter" von "Datenbank" hat inkompatiblen Typ "Callable [[Enten], bool]"; Erwartet "Callable [[Tabelle], bool]" (lsp)) < /p>
< /blockquote>
Dies ist sinnvoll, da Callable [[Tabelle], Bool] keine Kompatibilität mit Enten garantiert, auch wenn es sich um eine Unterklasse handelt. Ich möchte, dass die Methode mit einer beliebigen Unterklasse der Tabelle funktioniert und den Typ Checker das versteht. Ich brauche eine Möglichkeit, dem Typ -Checker mitzuteilen, dass die Datenbankfunktionen mit einer beliebigen Unterklasse der Tabelle funktionieren sollten und dass bestimmte Vorgänge möglicherweise einen spezifischeren Typ erfordern.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post