Если я вызываю 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
Очень интересно! Как я могу написать такой класс? Я имею в виду, что каждый трюк для такой перегрузки функции, которую я видел, не включал явные подписи.
TypeError - это еще одно исключение. Вы можете взять * args ** kwargs, проверить их и поднять TypeError самостоятельно, указать отображаемый текст - например. перечисление ожидаемого вызова.
Говоря это, PyQt является связкой .pyd == родного расширения python, написанного на C или С++ (с использованием Boost:: Python). По крайней мере, последний поддерживает "настоящие" перегрузки afaik.
В любом случае, вы не должны этого делать, если у вас нет веской причины. Питон печатается в утке, обнимает его.
Вполне возможно, что его init просто использует __init__(self, *args, **kwargs)
, а затем выполняет собственное тестирование подписи под списком args
и kwargs
dict.