簡體   English   中英

python類中的全局字典

[英]global dictionary within a class python

我正在用Python設計一個庫存類,它應該跟蹤商店中庫存的物品,添加新物品以及刪除它們。

麻煩來自於我在課堂上的“項目”定義。 當我在字典中添加另一個項目時,它會替換它,但不會添加它。 我感謝您的幫助! 為什么不添加???

class Store:

    def __init__(self, name, email):
        self.name = name
        self.email = email

    # two accessor methods
    def getName(self):
        return self.name

    def getEmail(self):
        return self.email

    # makes print work correctly
    def __str__(self):
        return str(self.name)

    # items
    def additem(self, item, price):
        global items
        items = {}
        self.item = str(item)
        self.price = float(price)
        items[self.item] = price

    def delitem(self, item):
        items.remove(item)

    def displayinventory(self):
        return items

每次調用additem時,您都將items設置為新的空字典。 因此,在添加新項目之前,它始終會擦除所有內容。 而是在函數外設置items = {} 進行self.item = str(item) (與價格相同self.item = str(item)也沒有意義,因為這只會覆蓋現有的self.item ,因此您只能訪問最新的self.item

實際上,您可能應該做的是使items成為對象的屬性,如下所示:

class Store:

    def __init__(self, name, email):
        self.name = name
        self.email = email
        self.items = {}

    # rest of your code here. . .

    def additem(self, item, price):
        self.items[str(item)] = float(price)

    def delitem(self, item):
        del self.items[str(item)]

    def displayinventory(self):
        return self.items

您這樣做的方式是,只有一個全局items dict將在所有商店之間共享。 上面的方法為每個商店提供了自己的商品字典,因此可以保留自己的商品記錄。

即使這是幾年前提出的一個觀點,其他人可能對此答案也很感興趣。 如果要在類中全局使用字典,則需要在使用類的部分中對其進行定義。 如果您在main中使用您的類,則在其中進行定義。 默認情況下,字典或o列表是全局的。

class Store:

    ...

    def additem (self, item, price):
        self.item = str (item)
        self.price = float (price)
        items [self.item] = price

def main ():
    ...
    items = dict ()
    myStore = Store ()
    ....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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