2017-09-01 17 views
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 
  1. 私は何のコードを書くべきです最後の__init__の定義では、オーバーロードに異なる数のパラメータがあることがわかりますか?
  2. PyCharmは余分なオーバーロードされていない定義を提供していないQtGui.pyiの定義について不平を言っていないようですが、それは私のコードのようです。
  3. 私は、PyCharmがCall to __init__ of super class is missedという文句を言わずに私の過負荷のそれぞれにsuper().__init__()を入れましたが、それが正しいかどうかわかりません。

答えて

0

スタブファイルとスタブファイルと通常のPythonファイルでtyping.overload使用状況に関するPEP 484のthis一部をお読みください。

+0

PEP 484から、私はなぜ 'QtGui.pyi'に' @ overload's [my point#2]しかないのか理解しています。私はまた、彼らが呼び出されないので 'overload'のボディが何であるかは問題ではないことを知っているので、' __init__'の欠落に関するPyCharmの警告はおそらく偽です[私のポイント#3]。 それでも#1は私に残っています:異なる数のパラメータが与えられた場合、実際にこの場合には単一の実装定義をどのように記述するのですか?私は、「__init __(self、* args、** kwargs)」を使用しなければならないと考えることができます---それは正しいアプローチですか? – JonBrave