Потеря аргумента в функции класса

Пишу программу, передающую данные между программой клиент сервер. Но у меня где теряется аргемент при вызове функции класса, не могу понять где.

TypeError: listen_user() missing 1 required positional argument: 'user'

Вот код сервера:

import socket
import threading

class Server():

def __init__(self):
    self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    self.server.bind(('127.0.0.1', 1234))
    self.server.listen(5)
    print('Server is listening')

    self.users = []



def send_all(self, data):
    for user in self.users:
        user.send(data)

def listen_user(self, user):
    print('Listening user')

    while True:
        data = user.recv(2048)
        print(f"User sent <{data}>")

        Server.send_all(data)

def start_server(self):
    while True:
        user_socket, address = self.server.accept()
        print(f"User {address[0]} connected")

        self.users.append(user_socket)
        listen_accepted_user = threading.Thread(
            target=Server.listen_user,
            args=(user_socket, )
        )
        listen_accepted_user.start()

if __name__ == '__main__':
    my_server = Server()
    my_server.start_server()

Ответы (2 шт):

Автор решения: CrazyElf
def listen_user(self, user):
...
target=Server.listen_user

Метод listen_user запустится в отдельном потоке как метод класса, а не метод экземпляра класса, поэтому параметр self в её описании не нужен (он и не используется в этой функции). Исправьте:

def listen_user(user):
→ Ссылка
Автор решения: eri

В вашем коде в куче мест надо заменить Server.foo() на self.foo() чтоб обратиться к экземпляру. А обращаясь к экземпляру передается он сам в self. Обращаясь к типу класса экземпляр не передается.

→ Ссылка