Перегрузка метода Python на основе количества аргументов? - PullRequest
1 голос
/ 06 августа 2010

Если я позвоню 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 ]

3 голосов
/ 06 августа 2010

TypeError - это просто еще одно исключение. Вы можете взять * args ** kwargs, проверить их и самостоятельно вызвать ошибку TypeError, указать отображаемый текст - например, список ожидаемых звонков.

При этом PyQt - это набор расширений .pyd == собственного Python, написанных на C или C ++ (используя Boost :: Python). По крайней мере, последний поддерживает «настоящие» перегрузки afaik.

В любом случае, вы не должны этого делать, если у вас нет действительно веской причины. Python напечатан уткой, обними его.

0 голосов
/ 06 августа 2010

Вполне возможно, что его init просто использует __init__(self, *args, **kwargs), а затем выполняет собственное тестирование подписи по списку args и kwargs dict.

...