从Python中的多个方法访问类文件



我的问题主要涉及如何在Python中的类中使用with关键字。

如果您有一个包含文件对象的类,那么如何使用with语句(如果有的话)。

例如,我在这里不使用with

class CSVLogger:
    def __init__(self, rec_queue, filename):
        self.rec_queue = rec_queue
        ## Filename specifications
        self.__file_string__ = filename
        f = open(self.__file_string__, 'wb')
        self.csv_writer = csv.writer(f,  newline='', lineterminator='n', dialect='excel')

如果我用另一种方法对文件进行处理,例如:

    def write_something(self, msg):
        self.csv_writer(msg)

这个合适吗?我应该把with放在什么地方吗?我只是担心其中一个__init__退出,with退出并可能关闭文件?

是的,with在其作用域结束时自动关闭文件,因此如果在__init__()函数中使用with语句,write_something函数将不起作用。

也许你可以在程序的主要部分使用with语句,而不是在__init__()函数中打开文件,你可以将文件对象作为参数传递给__init__()函数。然后在with块内的文件中执行您想要执行的所有操作。

示例-

类看起来像-

class CSVLogger:
    def __init__(self, rec_queue, filename, f):
        self.rec_queue = rec_queue
        ## Filename specifications
        self.__file_string__ = filename
        self.csv_writer = csv.writer(f,  newline='', lineterminator='n', dialect='excel')
    def write_something(self, msg):
        self.csv_writer(msg)

主程序可能看起来像-

with open('filename','wb') as f:
    cinstance = CSVLogger(...,f) #file and other parameters
    .... #other logic
    cinstance.write_something("some message")
    ..... #other logic

尽管这会使事情变得非常复杂,但最好不要使用with语句,而是确保在需要结束时关闭文件。

相关内容

  • 没有找到相关文章

最新更新