Так что по разным причинам у меня есть класс, который использует несколько подфайлов для записи и чтения. Мне интересно, как правильно инициализировать атрибут объекта в __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
Btw, почему вы сохраняете последние 'metafile' и' output' в обеих циклах? Есть ли ситуация, когда у вас будет несколько метафайлов или несколько выходов? – quasoft
Да, в некоторых случаях может быть несколько десятков. –
Может быть, вы можете оставить 'metafile' и' output' в качестве локальных переменных в функциях. Затем передайте 'metafile' в качестве аргумента в' read_data' и оба 'metafile' и' output' в 'comb_meta'. Таким образом вам не потребуется инициализировать их. Конечно, все это будет работать, если вы не используете их и в других методах. – quasoft