Python3“@ typing.overload”和参数

时间:2017-09-01 11:52:52

标签: python-3.x pycharm pyqt5 overloading

我不知道如何继续定义一个派生类,它有一个带有不同数字或参数的重载__init__()构造函数。

该课程来自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
  1. 我应该为最终__init__定义编写什么代码,因为您可以看到重载具有不同数量的参数?
  2. PyCharm似乎没有抱怨来自QtGui.pyi的定义没有提供额外的非重载定义,但似乎在我的代码中。
  3. 我已将super().__init__() s放入我的每个重载中,因为没有PyCharm抱怨Call to __init__ of super class is missed,我不知道这是否正确/需要。

1 个答案:

答案 0 :(得分:0)

请阅读PEP 484的this部分关于存根文件和存根文件和常规Python文件中的typing.overload用法。