проблемы с объектами Timer в python

#python #multithreading #timer

#python #многопоточность #таймер

Вопрос:

снова я борюсь с чем-то, хотя это может быть немного проще исправить, в отличие от двоичных массивов с моим последним сообщением. По сути, я создал объект timer с именем функции. Тем не менее, я продолжаю получать проблему, потому что в ней говорится, что вызываемая мной функция не определена в разделе Name Error.

 class DrawBot():
    waitingt = Timer(30.0, lockmap)
    ...
    def onlockmap(self, user):
        self.onBackup(user, "lockmapbackup")
        waitingt.start()

    def lockmap():
        onrestoremap("lockmapbackup")


NameError: name 'lockmap' is not defined
  

Ответ №1:

Потому что это не определено, пока вы не доберетесь до фактического определения. Кроме того, вы, вероятно, не хотите, чтобы каждый экземпляр класса имел один общий таймер… попробуйте это вместо:

 class DrawBot():
    def __init__(self):
        self.waitingt = Timer(30.0, self.lockmap)
    ...
    def onlockmap(self, user):
        self.onBackup(user, "lockmapbackup")
        self.waitingt.start()

    def lockmap(self):
        onrestoremap("lockmapbackup")
  

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

1. Я думаю, вам нужно использовать self.lockmap здесь.

Ответ №2:

lockmap() является частью DrawBot() , поэтому, если бы вы вызвали его самостоятельно, вы бы получили NameError .

Попробуйте вызвать его с помощью self , который ссылается на class :

 waitingt = Timer(30.0, self.lockmap)
  

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

1. self ссылается на экземпляр, но алгоритм поиска также выполнял бы поиск по классу, если у экземпляра нет имени. Это действительно должно иметь экземпляр Timer для экземпляра класса, а не экземпляр уровня класса.

2. Ах, спасибо. Я никогда не видел Timer класс, поэтому я просто подумал, что это общая ошибка…