Перегрузка метода Python на основе количества аргументов?

1

Если я вызываю 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

Очень интересно! Как я могу написать такой класс? Я имею в виду, что каждый трюк для такой перегрузки функции, которую я видел, не включал явные подписи.

Теги:
method-overloading

2 ответа

3
Лучший ответ

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

Говоря это, PyQt является связкой .pyd == родного расширения python, написанного на C или С++ (с использованием Boost:: Python). По крайней мере, последний поддерживает "настоящие" перегрузки afaik.

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню