首页 > 解决方案 > 如何在 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) 来实现这一点吗?

标签: pythonclass

解决方案


我会做以下事情:

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"))

作为一般规则,仅在必要时定义类成员,并在其他任何地方定义局部变量。


推荐阅读