2010-08-05 42 views
1

如果我打电话的QApplication的初始化没有参数,我得到基于参数计数的Python方法重载?

 
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 

非常有趣!我怎样才能写出这样的类?我的意思是,我看到的这种函数重载的每一个技巧都没有涉及明确的签名。

回答

3

TypeError是另一个异常。你可以选择* args ** kwargs,检查它们,并自己提出一个TypeError,指定显示的文本 - 例如列出预期的呼叫。这就是说,PyQt是一堆用C或C++(使用Boost :: Python)编写的.pyd == native python扩展。至少后者支持“真正的”过载afaik。

无论哪种方式,除非你有一个很好的理由,否则你不应该这样做。 Python是鸭式的,拥抱它。

0

它的init很可能只是使用__init__(self, *args, **kwargs),然后对args列表和kwargs字典进行自己的签名测试。