在类中打开文件

时间:2017-05-23 18:50:36

标签: python python-3.x

我有一个noob问题。 我需要做这个类,它在init打开文件和其他函数只是附加到这个打开的文件文本。我怎么能这样做? 需要做这样的事情,但这不起作用,所以帮助。

file1.py

from logsystem import LogginSystem as logsys

file_location='/tmp/test'
file = logsys(file_location)
file.write('some message')

file2.py

class LogginSystem(object):

    def __init__(self, file_location):
        self.log_file = open(file_location, 'a+')

    def write(self, message):
        self.log_file.write(message)

由于

1 个答案:

答案 0 :(得分:2)

与已提及的 zwer 一样,您可以使用__del__()方法来实现此行为。

__del__是Python的等价物,在对象被垃圾回收时被调用。虽然该对象实际上是垃圾回收(这取决于实现),但保证!

另一种更安全的方法是使用__enter____exit__方法,这些方法可以通过以下方式实现:

class LogginSystem(object):

def __enter__(self, file_location):
    self.log_file = open(file_location, 'a+')
    return self

def write(self, message):
    self.log_file.write(message)

def __exit__(self):
    self.log_file.close()

这允许您使用with - 语句进行自动清理:

from logsystem import LogginSystem as logsys

file_location='/tmp/test'
with logsys(file_location) as file:
    file.write('some message')

您可以阅读有关这些方法的更多信息,以及with - 语句here