Wie kann man eine Klasse als abstrakt in Python markieren (keine abstrakten Methoden und in einer mypy kompatiblen, wiedPython

Python-Programme
Anonymous
 Wie kann man eine Klasse als abstrakt in Python markieren (keine abstrakten Methoden und in einer mypy kompatiblen, wied

Post by Anonymous »

Ich versuche es unmöglich zu machen, eine Klasse direkt zu installieren, ohne dass sie unimplementierte abstrakte Methoden haben.

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
(Dies ist mein Versuch und kann falsch sein)
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)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post