Вам придется заменить все использования self.data_name
в функции import_csv()
вызовами либо setattr()
, либо getattr()
, чтобы иметь возможность использовать динамическое имя.
Использование self.data_name
будет использовать член с именем data_name
, как я подозреваю, вы уже поняли, и это не то, что вы хотите сделать.
Например, попробуйте следующее:
class import_data:
def import_csv(self, filename_csv, data_name):
#set dynamic named item to default value
#not required if this will happen anyway (in this example it does)
setattr(self,data_name,[])
#preparation activities
datafile = open(filename_csv, 'r')
datareader = csv.reader(datafile)
#do required work using a temporary local variable
temp = []
for row in datareader:
temp.append(row)
#copy the temporary local variable into the dynamically named one
setattr(self, data_name, temp)
#tidy up activities
datafile.close()
print("finished importing data")
Убедитесь, что вы посмотрите на ответ eumiro , в котором используется лучший, более компактный и более питонический подход к вашей конкретной проблеме с использованием with
и list()
.Тем не менее, вышеизложенное должно прояснить, как вы могли бы использовать setattr()
в более широком диапазоне случаев.