Je ne sais pas comment procéder pour définir une classe dérivée qui a un constructeur surchargé __init__()
avec des nombres ou des paramètres différents.Python3 "@ typing.overload" et les paramètres
La classe est de Qt5, et j'utilise PyQt5 (bien que je ne pense pas que cela soit important en soi). En QtGui.pyi
je vois:
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: ...
Ma tentative de départ est:
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)
Cependant, PyCharm la deuxième __init__
me met en garde contre:
A series of @overload-decorated methods should always be followed by an implementation that is not @overload-ed
- Quel code dois-je en train d'écrire pour la définition finale
__init__
, étant donné que vous pouvez voir les surcharges ont des nombres différents de paramètres? - PyCharm ne semble pas se plaindre des définitions de
QtGui.pyi
qui n'offrent pas de définition supplémentaire non surchargée, pourtant il semble dans mon code. - J'ai mis le
super().__init__()
s dans chacune de mes surcharges comme sans que PyCharm se plaintCall to __init__ of super class is missed
, je ne sais pas si c'est correct/requis.
Merci, à partir de PEP 484 Je comprends maintenant pourquoi 'QtGui.pyi' a seulement la' @ overload's [mon point # 2]. Je vois aussi que les corps des «surcharges» n'ont pas d'importance, puisqu'ils ne sont pas appelés, donc l'avertissement de PyCharm sur '__init__' manquant est probablement faux [mon point # 3]. Cela me laisse toujours aveC# 1: comment écrire réellement la seule définition d'implémentation dans ce cas, étant donné le nombre différent de paramètres? Je ne peux que penser à devoir utiliser: '__init __ (self, * args, ** kwargs)' --- est-ce la bonne approche? – JonBrave