[PyQt] PyQt/PyCharm/PEP problem with PyQt types
Florian Bruhin
me at the-compiler.org
Wed Nov 22 10:03:05 GMT 2017
On Wed, Nov 22, 2017 at 09:38:21AM +0000, J Barchan wrote:
> Thank you both, for the same solution. I had noticed the Union[QWidget,
> None] construct and wondered if that was the only way/what I'm supposed to
> do in Python. But it raises two questions, *and only solves one of the two
> problems*:
As mentioned in an earlier reply, there's Optional[QWidget] which is a
shorthand for that.
> 1. I am "surprised" at the need to do this from Python every time an object
> might have value None. It's "cumbersome" compared to the way NULL/0 is
> handled from C++, where it's always an acceptable value for any Object*
> parameter/return value. Do you guys really write that for every place None
> is acceptable?
Yes, and it's probably the more correct way, because the caller code *has* to
deal with the value being None.
> 2. The problem is unsolved where a *PyQt* function accepts/returns None.
> The second example I gave is calling QWidget.setParent(None). The
> declaration of this in QtWidgets.pyi is:
>
> def setParent(self, parent: 'QWidget') -> None:
>
> Following your solutions, this *ought* to have been:
>
> def setParent(self, parent: typing.Union['QWidget', None]) -> None:
>
> But the problem is that it *isn't* defined like that in the .pyi, and I
> can't help that. And it's not just that function, it's lots of others too
> which accept or return None, so this issue keeps arising in my calling
> code. Was it PyQt's job to recognise this and generate a different
> declaration or what? Given where we are, I don't see any way of avoiding
> the warning when calling such a PyQt function with None, do you?
Yes, PyQt should use Optional[QWidget] here. However, there's probably no way
for PyQt to know where None is acceptable and where it isn't...
FWIW last time I looked at PyQt's type definitions, they were mostly intended
for IDE documentation, and not for typechecking - and mypy (probably the most
widely used type checking tool) didn't like the files at all.
Florian
--
https://www.qutebrowser.org | me at the-compiler.org (Mail/XMPP)
GPG: 916E B0C8 FD55 A072 | https://the-compiler.org/pubkey.asc
I love long mails! | https://email.is-not-s.ms/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20171122/f515f079/attachment.sig>
More information about the PyQt
mailing list