什么是初始化引用文件的实例属性的正确方法?

时间:2017-02-03 11:38:45

标签: python

因此,出于各种原因,我有一个使用多个子文件写入和读取的类。我想知道在__init__中初始化对象属性的正确方法是什么。由于文件只是作为字符串文件的路径,我选择将它们初始化为self.file = 'file'。由于某种原因,这对我来说非常肮脏,我确信这违反了某种惯例。我猜测self.metafile = None可能是一个受欢迎的惯例,但实际上并不确定。

一个简单的例子(只有两个对象属性文件,在某些情况下我会使用5-6个对象属性文件)。 (我意识到在这种情况下,将它们用作对象属性并不是绝对必要的,但我发现它确实帮助我完成了我正在做的实际工作,而且我是这里主要是关于如何初始化文件的语义。)

class FileHandler(object):

    def __init__(self, source, meta):
        self.source_folder = source
        self.meta_folder = meta
        self.metafile = 'file'
        self.output = 'file'

    def read_meta(self):
        meta = glob.glob(self.meta_folder+ '*.csv')
        for m in meta:
            self.metafile = m
            self.read_data()   

    def read_data(self):
        source = glob.glob(self.source_folder + '*.csv')
        for src in source:
            current_file = src.strip('.csv')
            if current_file == self.metafile.strip('_meta.csv')
                self.output = current_file + '_output.csv'
                self.combine_meta()

    def combine_meta(self):
        # reads the source data, combines it with metadata and writes out
        # a neat csv file (to self.output) that can be imported into a database

1 个答案:

答案 0 :(得分:1)

是的,通常我会在构造函数中将metafileoutput设置为None

class FileHandler(object):

    def __init__(self, source, meta):
        self.source_folder = source
        self.meta_folder = meta
        self.metafile = None
        self.output = None

....

它允许您测试相应的文件是否已初始化,只需检查它是否为Truth。例如:

if self.metafile:
    ....