python - 如何在 Python 中关闭类的另一个函数内的文件?
问题描述
我有一个函数 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) 来实现这一点吗?
解决方案
我会做以下事情:
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"))
作为一般规则,仅在必要时定义类成员,并在其他任何地方定义局部变量。
推荐阅读
- javascript - 如何为 Firebase DB 设置安全规则,以使用户无法向 DB 发出未经授权的请求?
- python - 如何在 Python 中检查大于 N 行的函数
- r - 使用 dplyr::filter() 删除 NA
- react-native - 返回按钮以纠正平面列表的位置
- google-sheets - 谷歌表格“如果”从列而不是单元格进行验证
- c++ - 我的 system() 命令给出了一些需要忽略的警告。如何隐藏警告?
- python - 'dict' 对象没有属性 '_committed' 谁能解释为什么会发生这个错误
- android - 在 Windows 10 上安装 Android Studio 时出现任何错误
- angular - 如何在 Angular 中使用 HttpClient GET 方法?
- django - Django Form - 如何为一个字段创建一个带有循环的自定义表单模板?