【发布时间】:2023-01-13 18:07:25
【问题描述】:
我正在用 Python 创建一个 POS 系统,它几乎完成了。 (不包括 GUI)。但是,我希望能够存储用户注册的项目。
我尝试将对象保存到文件中,但这没有帮助:
with open('myObject.pkl', 'wb') as outp:
itemObject = Item("", 0, 0)
pickle.dump(itemObject, outp, pickle.HIGHEST_PROTOCOL)
即使在我输入商品的详细信息(“名称”、价格、库存)并退出程序后,当我再次启动它时,我也必须重新注册该商品。
我也在网上搜索了这件事,但是我得到的所有结果都不支持更新文件中对象的属性。
我也在论坛上查看了更多示例,但没有一个能很好地满足我的需求,比如这个:Saving an Object (Data persistence)、Python- Saving list of objects and its attributes
如果有帮助,这里是我定义类和对象的地方:
class Item:
def __init__(self, name, price, stock):
self.name = name
self.price = price
self.stock = stock
itemObject = Item("", 0, 0)
下面是根据用户输入更新类属性的函数:
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 作为我的第一语言,我也是堆栈溢出的新手。任何帮助,将不胜感激。提前致谢。
【问题讨论】:
-
Python 在启动时不会神奇地将 pickle 文件与对象相关联。你必须加载 pickle 文件。在启动时,检查 pickle 文件。如果它存在,则加载其中的对象。如果您能够做到这一点,请跳过 regItem 步骤。如果没有,则让用户注册它。我无法从您的示例中真正分辨出 itemObject 来自何处,因此我没有任何代码示例可以共享。