如果我在没有参数的情况下调用QApplication的 init ,我会
TypeError: arguments did not match any overloaded call: QApplication(list-of-str): not enough arguments QApplication(list-of-str, bool): not enough arguments QApplication(list-of-str, QApplication.Type): not enough arguments QApplication(Display, int visual=0, int colormap=0): not enough arguments QApplication(Display, list-of-str, int visual=0, int cmap=0): not enough arguments
非常有趣!我该怎么写这样的课?我的意思是,我看到的这种函数重载的每个技巧都没有涉及显式签名。
答案 0 :(得分:3)
TypeError只是另一个例外。你可以拿* args ** kwargs,检查那些,然后自己引发一个TypeError,指定显示的文本 - 例如列出预期的电话。
话虽这么说,PyQt是一堆.pyd == native python扩展,用C或C ++编写(使用Boost :: Python)。至少后者支持“真正的”超载。
无论哪种方式,除非你有充分的理由,否则你不应该这样做。 Python是鸭子型的,拥抱它。
答案 1 :(得分:0)
很可能它的init只是使用__init__(self, *args, **kwargs)
,然后对args
列表和kwargs
dict进行自己的签名测试。