Я немного новичок в Python и очень плохо знаком с потоками. Я пытаюсь написать клиент для интерфейса клиент-веб-сервер и использую шаблон проектирования State. Я застрял на использовании объекта таймера внутри моего класса в качестве переменной класса. Я реализую объект, используя класс threading.Timer, но у меня возникают проблемы при передаче метода set_time в качестве аргумента конструктору. Если я использую threading.Timer (5.0, self.set_time), я получаю ошибку «NameError: имя« self »не определено». Если я использую threading.Timer (5.0, set_time), я получаю ошибку «NameError: имя« set_time »не определено». Ниже мой код:
import time
import threading
import sys
from packet import Packet
from check import ip_checksum
class State():
timer = threading.Timer(5.0, self.set_time)
timeout = False
def __init__(self):
time = False
def time_out(self):
return time
def set_time(self):
global timeout
timeout = True
def start_timer(self):
timer.start()
def stop_timer(self):
global timeout
timer.cancel()
timeout = False
def send_packet(self, data):
print("Parent state send: " + data)
self.start_timer()
return True
def receive_packet(self, packet):
print("Parent state receive packet")
self.stop_timer()
return True
Я погуглил и посмотрел на Экземпляр класса Python против переменных класса и Python threading.timer - повторять функцию каждые 'n' секунд . Это помогло, но все же у меня есть два вопроса. Один в общем, другой более специфичный для моей проблемы.
Первый: как создать экземпляр переменной класса, использующей конструктор, который ссылается на метод в классе.
Два: как я могу использовать поток в качестве переменной класса для классов, которые наследуются от моего класса State? Например, скажем, у меня есть класс Wait_For_Call, который наследует от State. Я создаю экземпляр объекта wait_for_call = Wait_For_Call (). Могу ли я просто сделать wait_for_call.start_timer () или wait_for_call.stop_timer ()?