开发者

Python method overload based on argument count?

If I call QApplication's init without arguments i get

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

very interesting! How can I write a class like that?? I mean, every trick for this kind of function overloading I saw did not involve explic开发者_开发技巧it signatures.


TypeError is just another Exception. You can take *args **kwargs, check those, and raise a TypeError yourself, specify the text displayed - e.g. listing the expected call.

That being said, PyQt is a bunch of .pyd == native python extension, written in C or C++ (using Boost::Python). At least the latter supports "real" overloads afaik.

Either way, you shouldn't do this unless you have a really good reason. Python is duck-typed, embrace it.


It's quite possible that its init is simply using __init__(self, *args, **kwargs) and then doing its own signature testing against the args list and kwargs dict.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜