[英]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.