Боже мой, я был идиотом. Мне нужно начать читать сообщения об ошибках более тщательно.
Код, который фактически вызвал проблему, на самом деле не был здесь. Это было несколько строк внутри конструктора. Вот оно:
class LocalTestHost:
def __init__(self, mst, port, local_ip, remote_if_mac, remote_if_ip, service_port):
.
. <some initialization code>
.
# This is the faulty line
self.__host_operations = HostOperationsFactory().create(
local_ip, port, mst, remote_if_ip)
А вот и сообщение об ошибке, я не читал и по глупости не отвечал со своим вопросом:
>>> test_hosts.LocalTestHost(1,2,3,4,5,6)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "test_hosts.py", line 709, in __init__
self.__host_operations = HostOperationsFactory().create(
File "test_hosts.py", line 339, in create
remote_ip)
File "test_hosts.py", line 110, in __init__
packet_size, remote_ip)
TypeError: __init__() takes exactly 7 arguments (6 given)
Я немного реорганизовал свой код и добавил параметры к нескольким методам и конструкторам, но я забыл обновить их использование в нескольких местах. Эта create
функция на самом деле возвращает другой объект, который она создает, и ее конструктор (кстати, имеет те же параметры, что и выбранный мной конструктор), не получил все параметры, которые должен иметь.
Я не прочитал сообщение полностью, и моя путаница возникла из-за того, что я передал конструктору слишком мало параметров. Теперь я также попытался добавить слишком много параметров для проверки работоспособности, и там на самом деле это был конструктор, который я выбрал. Я удивлен, что не увидел, что в этом случае трассировка ошибок была значительно короче.
Сегодня я усвоил ценный урок. Проблема в том, что, по-моему, я несколько раз склонялся к этому уже несколько лет.