Pyre: „Ungültige Klasseninstanziierung“ auf einem Factory-Muster mit ABC-TyphinweisPython

Python-Programme
Anonymous
 Pyre: „Ungültige Klasseninstanziierung“ auf einem Factory-Muster mit ABC-Typhinweis

Post by Anonymous »

Ich habe ein Factory-Muster implementiert, aber Pyre-Check stolpert über den Typhinweis und dachte, ich möchte den Mapping-Dict-Typhinweis instanziieren: type[MyClassABC]
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__`.
Da Pyre-Check glaubt, dass ich den Typhinweis instanziieren werde, geben Sie [MyClassABC] ein. Wie kann ich meine Typhinweise so korrigieren, dass es immer noch die richtigen Typhinweise sind, Pyre-Check jedoch nicht glaubt, dass ich eine abstrakte Methode instanziiere? Ich möchte die abstrakte Methode init für den Parametertyp-Hinweis beibehalten.

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")

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post