У объекта нет атрибута «append»?

#python #python-multithreading

#python #python-многопоточность

Вопрос:

Я работаю над упрощенным чат-ботом sorting hat и использую потоковую обработку для обработки синхронизации между входными данными. Однако, когда я передаю l (список) для создания потока, тип l теперь sorting_hat , поэтому у него нет атрибута «добавить». Как мне сохранить l объект списка в input_thread?

примечание: это не домашний проект. Я студент, который работает над этим в качестве побочного проекта для проведения разъяснительного урока CS для старшеклассников, чтобы повысить интерес к информатике. Будем признательны за любую помощь!

 class sorting_hat:
    def __init__(self, *args, **kwargs):
        self.gryffindor = 0
        self.ravenclaw = 0
        self.hufflepuff = 0
        self.slytherin = 0
        self.start = 0
        self.name = ""
        self.sort()

    def sort(self):
        print("Oh, you may not think I’m pretty,n"  
              "But don’t judge on what you see,n"  
              "I’ll eat myself if you can findn"  
              "A smarter hat than me.n"  
              "There’s nothing hidden in your headn"  
              "The Sorting Hat can’t see,n"  
              "So try me on and I will tell youn"  
              "Where you ought to be.n")
        time.sleep(1.5)
        self.prompt_init_response()

    def prompt_init_response(self):
        self.start = time.time()
        l = []
        t = threading.Thread(group=None, target=self.input_thread, args=(l,))
        t.start()
        flag10 = False
        flag25 = False
        while 1:
            if l:
                self.name = l[0]
                break
            elapsed = time.time() - self.start
            if elapsed > 10 and flag10 is False:
                flag10 = True
                print("Well, well, well...")
                print("Are you gonna just sit there or are you gonna introduce yourself? Name?")
            elif elapsed > 25 and flag25 is False:
                flag25 = True
                print("I'll just doze off then until you give me your name... Zzzzz")


    def input_thread(l, *args):
        print(type(l))
        name = input("Oh! A new student! What's your name?")
        l.append(name)
  

Комментарии:

1. Почему у вашего input_thread метода нет self параметра? Конечно, это вызовет проблемы…

2. когда я добавил параметр self, я получил сообщение об ошибке, в котором говорилось, что я предоставлял потоку 3 аргумента, когда он ожидал 2. Я совершенно новичок в потоковой обработке (никогда не делал этого раньше) и просто собираю кусочки вместе с помощью руководств

3. Однако вы не передаете input_thread self при его вызове… Я надеюсь, вы это знаете. Вы все равно просто передадите его l и *args , и он унаследует self.

4. Я не могу воспроизвести эту проблему. Добавьте self , и это сработает, как ожидалось.

5. @Aran-Fey Вы можете воспроизвести это, удалив self :P.