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)
しかし、__init__
PyCharm第二は、私に警告します:
A series of @overload-decorated methods should always be followed by an implementation that is not @overload-ed
- 私は何のコードを書くべきです最後の
__init__
の定義では、オーバーロードに異なる数のパラメータがあることがわかりますか? - PyCharmは余分なオーバーロードされていない定義を提供していない
QtGui.pyi
の定義について不平を言っていないようですが、それは私のコードのようです。 - 私は、PyCharmが
Call to __init__ of super class is missed
という文句を言わずに私の過負荷のそれぞれにsuper().__init__()
を入れましたが、それが正しいかどうかわかりません。
PEP 484から、私はなぜ 'QtGui.pyi'に' @ overload's [my point#2]しかないのか理解しています。私はまた、彼らが呼び出されないので 'overload'のボディが何であるかは問題ではないことを知っているので、' __init__'の欠落に関するPyCharmの警告はおそらく偽です[私のポイント#3]。 それでも#1は私に残っています:異なる数のパラメータが与えられた場合、実際にこの場合には単一の実装定義をどのように記述するのですか?私は、「__init __(self、* args、** kwargs)」を使用しなければならないと考えることができます---それは正しいアプローチですか? – JonBrave