簡體   English   中英

保存 Object 並能夠更新其屬性

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM