Я пытаюсь распаковать различные экземпляры классов, которые сохраняются в отдельных файлах .pkl, путем итерации по списку, содержащему все экземпляры класса (каждый экземпляр класса присоединяется к соответствующему списку при создании экземпляра) ,Объяснять экземпляры классов, перейдя по списку
Этот работает:
# LOAD IN INGREDIENT INSTANCES
for each in il:
with open('Ingredients/{}.pkl'.format(each), 'rb') as f:
globals()[each] = pickle.load(f)
Например, один ингредиент Aubergine
:
print(Aubergine)
выход:
Name: Aubergine
Price: £1.00
Portion Size: 1
Однако это не работает:
# LOAD IN RECIPE INSTANCES
for each in rl:
with open('Recipes/{}.pkl'.format(each.name), 'rb') as f:
globals()[each] = pickle.load(f)
Я могу только предположить, что проблема связана с each.name
используется для имен файлов рецептов, в то время как each
используется для имен файлов ингредиента. Это преднамеренно, поскольку атрибут name
рецептов отформатирован для конечного пользователя (т. Е. Содержит пробел и т. Д.). Я думаю, что это может быть проблемой, но я не уверен.
Оба ингредиента и рецепт класса используют:
def __repr__(self):
return self.name
Например:
У меня есть экземпляр класса рецепт SausageAubergineRagu
, для которых self.name
является 'Sausage & Aubergine Ragu'
, и это находится внутри списка rl
. Я попытался тестирование это индивидуально:
вход:
rl
выход:
[Sausage & Aubergine Ragu]
Поэтому я считаю, что этот код:
# LOAD IN RECIPE INSTANCES
for each in rl:
with open('Recipes/{}.pkl'.format(each.name), 'rb') as f:
globals()[each] = pickle.load(f)
... должно привести это :
with open('Recipes/Sausage & Aubergine Ragu.pkl', 'rb') as f:
globals()[SausageAubergineRagu] = pickle.load(f)
Но попытка получить доступ к экземплярам класса рецептов приводит к появлению NameError.
одно замечание - пожалуйста не спросить, почему я делаю вещи таким образом. Вместо этого помогите мне решить и решить проблему, чтобы я мог заставить ее работать и понять, что происходит. Оценивается :)
Почему вопрос о пропуске? –