基于参数计数的Python方法重载?

时间:2010-08-05 21:24:52

标签: python overloading

如果我在没有参数的情况下调用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

非常有趣!我该怎么写这样的课?我的意思是,我看到的这种函数重载的每个技巧都没有涉及显式签名。

2 个答案:

答案 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进行自己的签名测试。