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