0
我不知道如何繼續定義派生類,該派生類具有帶有不同數字或參數的重載__init__()
構造函數。Python3「@typing.overload」和參數
該類是從Qt5,我使用PyQt5(雖然我認爲這本身並不重要)。在QtGui.pyi
我看到:
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: ...
我開始嘗試是:
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)
然而,PyCharm第二__init__
警告我:
A series of @overload-decorated methods should always be followed by an implementation that is not @overload-ed
- 我應該寫什麼代碼最後的
__init__
的定義,因爲你可以看到重載有不同數量的參數? - PyCharm似乎沒有抱怨
QtGui.pyi
的定義,它們不提供額外的非重載定義,但似乎在我的代碼中。 - 我已將
super().__init__()
放入每個重載中,因爲沒有PyCharm抱怨Call to __init__ of super class is missed
,我不知道這是否正確/需要。
謝謝你,從PEP 484我現在明白了爲什麼'QtGui.pyi'只有'@ overload's [我的觀點#2]。我也看到,'overload'的主體是什麼都沒有關係,因爲它們沒有被調用,所以關於'__init__'缺少的PyCharm警告可能是虛假的[我的觀點#3]。 這仍然給我#1:在這種情況下,給定不同數量的參數,實際上如何編寫單個實現定義?我只能想到必須使用:'__init __(self,* args,** kwargs)'---是否是正確的方法? – JonBrave