Ich weiß nicht, wie Sie vorgehen, um eine abgeleitete Klasse zu definieren, die einen überladenen __init__()
Konstruktor mit anderen Zahlen oder Parametern hat.Python3 "@ typing.overload" und Parameter
Die Klasse ist von Qt5, und ich verwende PyQt5 (obwohl ich denke, das ist nicht wichtig). In QtGui.pyi
ich sehe:
class QStandardItemModel(QtCore.QAbstractItemModel):
@typing.overload
def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ...
@typing.overload
def __init__(self, rows: int, columns: int, parent: typing.Optional[QtCore.QObject] = ...) -> None: ...
Mein Startversuch ist:
class DBStandardItemModel(QtGui.QStandardItemModel):
@typing.overload
def __init__(self, parent: typing.Optional[QtCore.QObject] = None) -> None:
super().__init__(parent)
@typing.overload
def __init__(self, rows: int, columns: int, parent: typing.Optional[QtCore.QObject] = None) -> None:
super().__init__(rows, columns, parent)
jedoch in PyCharm die zweite __init__
warnt mich:
A series of @overload-decorated methods should always be followed by an implementation that is not @overload-ed
- Welche Code sollte ich schreiben die endgültige
__init__
Definition, vorausgesetzt, dass Sie die Überlastungen sehen können unterschiedliche Anzahl von Parametern haben? - PyCharm scheint sich nicht über die Definitionen aus
QtGui.pyi
zu beschweren, die keine zusätzliche nicht überladene Definition bieten, aber es scheint in meinem Code zu sein. - Ich habe die
super().__init__()
s in jede meiner Überlastungen als ohne dass PyCharm beschwertCall to __init__ of super class is missed
, ich weiß nicht, ob das richtig/erforderlich ist.
Danke, von PEP 484 Ich verstehe jetzt, warum 'QtGui.pyi' nur die' @ Überladung '[meine Punkt # 2] hat. Ich sehe auch, dass es egal ist, was die Körper der Überlastung sind, da sie nicht aufgerufen werden, so dass die PyCharm Warnung über "__init__" fehlt ist wahrscheinlich falsch [meine Nummer # 3]. Das lässt mich immer noch mit # 1: Wie schreibt man tatsächlich die einzelne Implementierung Definition in diesem Fall, angesichts der unterschiedlichen Anzahl von Parametern? Ich kann nur daran denken, zu verwenden: "__init __ (selbst, * args, ** kwargs)" --- ist das der richtige Ansatz? – JonBrave