[英]Saving an Object and being able to update its attributes
我正在Python中創建一個POS系統,已經快完成了。 (不包括 GUI)。 但是,我希望能夠存儲用戶注冊的項目。
我嘗試將 object 保存到文件中,但這沒有幫助:
with open('myObject.pkl', 'wb') as outp:
itemObject = Item("", 0, 0)
pickle.dump(itemObject, outp, pickle.HIGHEST_PROTOCOL)
即使在我輸入商品的詳細信息(“名稱”、價格、庫存)並退出程序后,當我再次啟動它時,我也必須重新注冊該商品。
我也在網上搜索了這件事,但是我得到的所有結果都不支持更新文件中object的屬性。
我還在論壇上查看了更多示例,但沒有一個能很好地滿足我的需求,比如這個: Saving an Object (Data persistence) , Python- Saving list of objects and its attributes
如果有幫助,這里是我定義 class 和 object 的地方:
class Item:
def __init__(self, name, price, stock):
self.name = name
self.price = price
self.stock = stock
itemObject = Item("", 0, 0)
這是根據用戶輸入更新 class 屬性的 function:
def regItem():
name = input("What is your item called? ")
name.lower()
if name == 'exit':
exit()
try:
price = int(input("How much does it cost? "))
name.lower()
if name == 'exit':
exit()
if (isinstance(price, int)):
stock = input("How much stock is available for this item? ")
name.lower()
if name == 'exit':
exit()
itemObject.name = name
itemObject.price = price
itemObject.stock = stock
int(itemObject.price)
int(itemObject.stock)
print("Item",itemObject.name,"priced at",itemObject.price,"with available stock of",itemObject.stock,"has been registered")
start()
except ValueError:
print("Must be a number")
regItem()
我正在學習 Python 作為我的第一語言,我也是堆棧溢出的新手。 任何幫助,將不勝感激。 提前致謝。
您需要有條件地加載您嘗試堅持的 object。
import os
import pickle
class Item:
def __init__(self, name, price, stock):
self.name = name
self.price = price
self.stock = stock
def __str__(self):
return f"Item {self.name} priced at {self.price} with available stock of {self.stock}"
def regItem():
name = input("What is your item called? ")
name.lower()
if name == 'exit':
exit()
try:
price = int(input("How much does it cost? "))
name.lower()
if name == 'exit':
exit()
if (isinstance(price, int)):
stock = input("How much stock is available for this item? ")
name.lower()
if name == 'exit':
exit()
itemObject = Item(name, price, stock)
print(f"{itemObject} has been registered")
return itemObject
except ValueError:
print("Must be a number")
return regItem()
def start(obj):
print("Starting {}".format(obj))
def main():
filename = 'myObject.pkl'
if os.path.exists(filename):
with open(filename, 'rb') as inp:
itemObject = pickle.load(inp)
else:
itemObject = regItem()
with open('myObject.pkl', 'wb') as outp:
pickle.dump(itemObject, outp, pickle.HIGHEST_PROTOCOL)
start(itemObject)
main()
運行一次以輸入數據。 再次運行它,它將以與您開始時相同的 object 開頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.