Hier ist ein Minimalbeispiel, außerdem ein Pyre-Check-Spielplatz, der die Prüfungen online durchführt.
Das Ziel ist ein Factory-Muster mit geeigneten Typhinweisen. Um dies zu erreichen, habe ich ein ABC für die Klasse erstellt, mit einer abstrakten Methode für __init__. Auf diese Weise kann ich in meiner IDE dank der ABC-Init sehen, welche Parameter bereitgestellt werden müssen. Ich erhalte jedoch die Fehlermeldung:
Code: Select all
33:15: Invalid class instantiation [45]: Cannot instantiate abstract class `MyClassABC` with abstract method `__init__`.
Code: Select all
from abc import abstractmethod
class MyClassABC:
@abstractmethod
def __init__(self, name: str) -> None:
pass
class MyClass2(MyClassABC):
def __init__(self, name: str) -> None:
self.name = name
class MyClass(MyClassABC):
def __init__(self, name: str) -> None:
self.name = name
class ClassFactory:
MAPPING: dict[str, type[MyClassABC]] = {
"myclass": MyClass,
"myclass2": MyClass2,
}
@staticmethod
def get_class() -> type[MyClassABC]:
return ClassFactory.MAPPING["myclass"]
if __name__ == "__main__":
factory_cls = ClassFactory.get_class()
instance = factory_cls(name="test")