【发布时间】:2019-04-10 05:29:31
【问题描述】:
我对 python 有点陌生,对线程也很陌生。我正在尝试为客户端-网络服务器接口编写客户端,并且我正在使用状态设计模式。我坚持在我的类中使用计时器对象作为类变量。我正在使用 threading.Timer 类实现该对象,但是在将 set_time 方法作为参数传递给构造函数时遇到了麻烦。如果我使用 threading.Timer(5.0, self.set_time) 我得到一个 "NameError: name 'self' is not defined" 错误。如果我使用 threading.Timer(5.0, set_time) 我得到一个“NameError: name 'set_time' is not defined”错误。以下是我的代码:
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
我在 Google 上搜索并查看了 Python class instance vs. class variables 和 Python threading.timer - repeat function every 'n' seconds。这些有帮助,但我仍然有两个问题。一个是一般性的,另一个更具体到我的问题。
一:我应该如何实例化一个使用引用类中方法的构造函数的类变量。
二:如何将线程用作类变量以供从我的 State 类继承的类使用?例如,假设我有一个继承自 State 的类 Wait_For_Call。我实例化了一个对象 wait_for_call = Wait_For_Call()。我可以只做 wait_for_call.start_timer() 或 wait_for_call.stop_timer() 吗?
【问题讨论】:
-
您希望他们对所有实例都使用一个计时器?
-
澄清一下,当您说“引用类中的方法”时,您是指静态方法还是非静态方法(引用实例变量的方法在实例化时使用会有点问题一个类变量:-))
-
是的,为所有实例使用一个计时器。这将是一个静态方法。
标签: python inheritance polymorphism class-variables