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

如何在Python中关闭类的另一个函数中的文件?,python,class,Python,Class,我运行了一个函数(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.Thre

我运行了一个函数(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
放在重置(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
那就够了!请注意,
\u reset
在文件未打开时可以安全地调用,因为
文件
属性存在并且是
(关闭已关闭的文件没有任何作用,但更清晰)

请注意,只有在其他地方使用
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"))

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

因为您使用的是类,
self.file
可以在函数之外的类内的任何地方使用,因此只需
self.file.close()
属性是
self.file
,您只需调用
self.file.close()
;无需将其重新分配回
self.file
“使用”完成任务
self.name=os.path.join(
那么您使用的是
name
后面的行。您的代码段有一个输入错误。