如何在Python中关闭该类的另一个函数中的文件?

时间:2018-08-07 08:23:28

标签: python class

我有一个函数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)中以实现此目的?

1 个答案:

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

通常,仅在必要时定义类成员,并在其他任何地方定义局部变量。