您好我正在尝试为我的班级制作一个日志文件,其中有任何东西都写在那里......
这是我班级的样子
class MyClass:
f = open('Log.txt','a')
def __init__(self):
self.f = open('Log.txt', 'a')
self.f.write("My Program Started at "+str(datetime.datetime.now())+"\n")
def __del__(self):
self.f.write("closing the log file and terminating...")
self.f.close()
我的代码有效,但如上所示我有两个f = open('Log.txt','a')
有什么方法可以避免这种情况吗? 我试图删除其中一个,但它会对我大喊......有没有更好的方法来做到这一点?
答案 0 :(得分:1)
这样的事情:
class Test:
def __init__(self): #open the file
self.f=open("log.txt", "w") #or "a"
def mywrite(self, mytext): #write the text you want
self.f.write("%s\n" % mytext)
def myclose(self): #close the file when necessary (you don't need to delete the object)
self.f.close()
myFile=Test()
myFile.mywrite("abcd")
myFile.myclose()
答案 1 :(得分:1)
你应该只有一个。
first f=...
在导入时将文件处理程序创建为类属性,因此第一次实例化MyClass时,处理程序处于打开状态,但是:
MyClass() # and __del__ is called here
MyClass() # f is closed
ValueError: I/O operation on closed file
如果你在__init__
方法中创建处理程序作为实例属性并在每次实例化MyClass()时打开文件,可能这就是你想要的,除非是你想在没有实例化的情况下使用该类。