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