2010-08-05 41 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字典進行自己的簽名測試。