#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
класс, поэтому я просто подумал, что это общая ошибка…