__init __ () получил неожиданный аргумент ключевого слова 'connect' - PullRequest
0 голосов
/ 01 декабря 2018

У меня проблема с переопределением метода init класса потока.Мне нужно только взять сокет, который я передаю методу init, когда создаю экземпляр объекта потока.Код класса потока:

class client_handle(threading.Thread):

    conne = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    def __init__(self, conne=None):
        threading.Thread.__init__(self, conne=conne)

Когда я создаю объект client_handle, я пишу:

socket_conn, addr = s.accept()
client_thread = client_handle(socket_conn)

Я также искал в других сообщениях, но не смог решить свою проблему.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Вам необходимо присвоить conne вручную в качестве атрибута экземпляра.Передача в качестве аргумента Thread.__init__ не будет работать (будет установлена ​​как групповой аргумент класса Thread).

from threading import Thread

class ClientHandle(Thread):
    def __init__(self, conne=None):
        super().__init__() # Python 3
        self.conne = conne
0 голосов
/ 01 декабря 2018

Thread.__init__ не имеет параметра с именем conne, поэтому вместо него необходимо передать значение в качестве позиционного аргумента.

def __init__(self, conne=None):
    threading.Thread.__init__(self, conne)

Кстати, атрибут класса client_handle.conne не имееткажется, служат какой-либо цели;Вы, вероятно, можете избавиться от него.

Обновление: передача сокета, в частности, Thread.__init__ явно неверна, но это относится к любой попытке "придумать" имя параметра, например conne, для метода, которыйне имеет параметра с именем conne.

...