<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif">This may be as much a Python question as a PyQt one.  I come from a C++ background.  I do not understand the syntax/code I need in a class I am deriving from a PyQt class to allow a new parameter to be passed to the constructor.</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">I see that I asked this question a long time ago at <a href="https://stackoverflow.com/questions/45999732/python3-typing-overload-and-parameters">https://stackoverflow.com/questions/45999732/python3-typing-overload-and-parameters</a> but never got an answer.</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">I now want to sub-class from <span style="font-family:monospace,monospace">QListWidgetItem</span>.  That starts with these constructors:</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default"><span style="font-family:monospace,monospace">QListWidgetItem(QListWidget *parent = nullptr, int type = Type)<br>QListWidgetItem(const QString &text, QListWidget *parent = nullptr, int type = Type)<br>QListWidgetItem(const QIcon &icon, const QString &text, QListWidget *parent = nullptr, int type = Type)<br>QListWidgetItem(const QListWidgetItem &other)</span></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">My sub-class should still support these constructors.  In addition to the existing <span style="font-family:monospace,monospace">text</span>, I want my sub-class to be able to store a new optional <span style="font-family:monospace,monospace">value</span>. At minimum/sufficient I want a new possible constructor like one of the following:</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><span style="font-family:monospace,monospace">MyListWidgetItem(<span style="font-family:monospace,monospace">const QString &text, <span style="font-family:monospace,monospace"><span style="color:rgb(255,0,255)">const QVariant &value,</span> </span></span>QListWidget *parent = nullptr, int type = Type)</span></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><span style="font-family:monospace,monospace"># or<br></span></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><div class="gmail_default" style="font-family:tahoma,sans-serif"><span style="font-family:monospace,monospace">MyListWidgetItem(<span style="font-family:monospace,monospace">const QString &text, <span style="font-family:monospace,monospace"><span style="color:rgb(255,0,255)">QVariant value = QVariant(),</span> </span></span>QListWidget *parent = nullptr, int type = Type)</span></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div></div><div class="gmail_default" style="font-family:tahoma,sans-serif">So for Python I know I start with a <i>typing overload</i> definition (for my editor) like <br></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default"><span style="font-family:monospace,monospace">@typing.overload</span></div><div class="gmail_default"><span style="font-family:monospace,monospace">def MyListWidgetItem(self, text: str, value: typing.Any, parent: QListWidget=None, type: int=Type)</span></div><div class="gmail_default"><span style="font-family:monospace,monospace">    pass<br></span></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">Then I get to the <i>definition</i> bit.  To cater for everything am I supposed to do:</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><div class="gmail_default"><span style="font-family:monospace,monospace">def __init__(self, *__args)</span></div><div class="gmail_default"><span style="font-family:monospace,monospace">    # Now what??<br></span></div><div class="gmail_default"><span style="font-family:monospace,monospace">    super().__init__(__args)<br></span></div></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif"></div><div class="gmail_default" style="font-family:tahoma,sans-serif">Is that how we do it?  Is it then my responsibility to look at <span style="font-family:monospace,monospace">__args[1]</span> to see if it's my <span style="font-family:monospace,monospace">value</span> argument?  And remove it from <span style="font-family:monospace,monospace">__args</span> before passing it onto <span style="font-family:monospace,monospace">super().__init__(__args)</span>?<br></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">Or, am I not supposed to deal with <span style="font-family:monospace,monospace">__args</span>, and instead have some definition with all possible parameters explicitly and deal with them like that?</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">Or what?  This is pretty fundamental to sub-classing to add parameters where you don't own the code of what you're deriving from.  It's easy in C-type languages; I'm finding it real to hard to understand what I can/can't/am supposed to do for this, I'd be really gratefully for a couple of lines to show me, please...! :)<br clear="all"></div><br>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><span style="font-family:tahoma,sans-serif">Kindest,</span></div><div><span style="font-family:tahoma,sans-serif">Jonathan</span></div></div></div></div></div></div></div></div></div>