Code: Select all
class Example:
def __new__(cls,*args,**kwargs):
if cls is Example:
raise TypeError("...")
return super().__new__(cls,*args,**kwargs)
< /code>
Ich versuche, dieses Snippet an einen separaten Ort zu verschieben, so dass jede solche Klasse diesen Code nicht wiederholen muss.C = TypeVar("C")
def abstract(cls:Type[C])->Type[C]:
class Abstract(cls):
def __new__(cls, name: str, bases: tuple[type,...], namespace: dict[str,Any])->"Abstract":
if cls is Abstract:
msg = "Abstract class {} cannot be instantiated".format(cls.__name__)
raise TypeError(msg)
return cast( Abstract, super().__new__(cls, name, bases, namespace) )
return Abstract
Aber MyPy beschwert /> Kontext < /em> < /p>
Dies steht im Zusammenhang mit einer Pyside6 -Anwendung, in der ich QEVENT subklassige, um zusätzliche zusätzliche Eigenschaften zu haben. Die Basisklasse, die diese Eigenschaften (Getters) definiert, hat eine Standardimplementierung. Ich möchte jedoch verhindern, dass sie direkt initialisiert wird, da sie nicht im QT -Ereignissystem registriert werden (und sollte nicht). (Ich habe ein paar weitere Klassen mit unterschiedlichen Standardwerten für die Bequemlichkeit)