我有一个函数run(self),在那个函数中我要打开一个文件。然后,我想在另一个函数reset(self)中关闭该文件。
这是我的课程:
class Heater (threading.Thread):
STATE_IDLE = "IDLE"
STATE_RUNNING = "RUNNING"
def __init__(self, simulate=False, time_step=config.sensor_time_wait):
threading.Thread.__init__(self)
self.daemon = True
self.simulate = simulate
self.time_step = time_step
self.reset()
if simulate:
self.temp_sensor = TempSensorSimulate(self, 0.5, self.time_step)
if sensor_available:
self.temp_sensor = TempSensorReal(self.time_step)
else:
self.temp_sensor = TempSensorSimulate(self,
self.time_step,
self.time_step)
self.temp_sensor.start()
self.start()
def reset(self):
self.profile = None
self.start_time = 0
self.runtime = 0
self.totaltime = 0
self.target = 0
def run(self):
now = datetime.datetime.now()
self.name = os.path.join('/storedata/store', "Date_" + now.strftime("%Y-%m-%d") + ".txt")
self.file = open(name, 'a')
self.file.write(now.strftime("%Y-%m-%d"))
reset()
我是否要将self.file = self.run.file.close
放在reset(self)中以实现此目的?
答案 0 :(得分:1)
我将执行以下操作:
def __init__(self, simulate=False, time_step=config.sensor_time_wait):
self.file = None
现在您的课程中有一个名为file
的属性。设置为None
。现在
def __reset(self):
if self.file:
self.file.close()
self.file = None
那应该做!请注意,未打开文件时可以安全地调用__reset
,因为file
属性存在且为None
(关闭已关闭的文件不会执行任何操作,但是,更清楚)
请注意,只有在其他地方使用self.file
时,此设计才有意义。否则,不定义任何成员就可以:
name = os.path.join(... // your code used "self.name" for some reason
with open(name, 'a') as file:
file.write(now.strftime("%Y-%m-%d"))
通常,仅在必要时定义类成员,并在其他任何地方定义局部变量。