2016-07-16 17 views
1

У меня есть словарь self.total = defaultdict(int) в моем классе Order, который используется для ввода и печати итогов каждого элемента, заказанного в моей системе заказа. Объект хранится впостоянно хранить значение, которое будет использоваться в dict

coffee_available=[Coffee(1, "1: Flat White", 3.50), 
      Coffee(2, "2: Long Black", 3.50), 
      Coffee(3, "3: Cappuccino", 4.00), 
      Coffee(4, "4: Espresso", 3.25), 
      Coffee(5, "5: Latte", 3.50)] 
` 

и так, как я «заказ» этих объектов путем вызова функции в моем порядка классе

def order(self, order_amount, coffee_id): 

     self.total[coffee_id] += order_amount 

и я печать каждого типа элементов и их соответствующие суммы заказа, используя другой функция в моем классе порядка

def print_order(self): 
    print(" ") 
    print("Coffee Type\t\tAmount of Times ordered")      
    print("-----------\t\t-----------------------") 
    for coffee in coffee_available: 

     print("{}\t- - -\t {} ".format(coffee.coffee_type, self.total[coffee.coffee_id])) 

это работает хорошо, как каждый раз, когда мой код выполняется в том же сеансе он хранит значение order_amount каждый раз и отображает его correctl y, единственная проблема заключается в том, что если я завершаю программу, он не сохраняет данные для того, когда я его открываю дальше. Если бы я постоянно хранил данные, как бы я это сделал и что я должен постоянно хранить?

+0

питона 'pickle' библиотеке является ключом: https://wiki.python.org/moin/UsingPickle –

ответ

1

Таким образом, вы можете сделать любой объект python сохраненным в файле, используя pickle. Так позволяет сказать, что вы хотите, чтобы сохраняться total

import pickle 
# total is a dictionary 
# to store it in a file 
with open('total_dictionary.pickle', 'wb') as handle: 
    pickle.dump(total, handle) 

# lets say program terminated here 

Теперь

# to load it, if it was previously stored 
import pickle 
with open('total_dictionary.pickle', 'rb') as handle: 
    total = pickle.load(handle) 

# total dictionary is exactly same even if the program terminated. 

Таким образом, ваш метод order обновляет self.total и print_order просто смотрит на него. Поэтому в основном вам необходимо сохранить self.total после каждого обновления (звонок order). И, в инициализаторе классе, где вы первый объявить self.total, вам нужно initialze self.total со словарем загруженным из квашеной файла (если он существует)


Просто чтобы быть немного более конкретно:

import pickle 
.. 
def order(self, order_amount, coffee_id): 
    self.total[coffee_id] += order_amount 
    with open('total_dictionary.pickle', 'w') as handle: 
     pickle.dump(total, handle) 

и в initializer из Order класса

import os 
.. 
def __init__(self): 
    ... 
    if os.path.exists("total_dictionary.pickle"): 
     with open('total_dictionary.pickle', 'r') as handle: 
      total = pickle.load(handle) 
    else: 
     total = defaultdict(int) 
    ... 

Вы можете удалить/удалить total_dictionary.pickle для сброса.

Надеется, что это помогает :)

+0

так как я использую маринад для хранения значений в себе. total dict и вызвать его, когда мне нужно вызвать функцию заказа позже – killerstick1

+0

, функция 'order' обновляет' self.total' и 'print_order' обращается к ней. Таким образом, все, что вам нужно сделать, - это: после каждого вызова обновления, то есть 'order', запишите словарь' total' в файле с помощью pickle. И в инициализаторе класса убедитесь, что если файл маринованного файла присутствует, то инициализируйте общее количество с помощью этого словаря. Круто ? –

+0

спасибо за помощь, теперь он отлично работает. Он не хранит самый первый заказ, но верно – killerstick1

 Смежные вопросы

  • Нет связанных вопросов^_^