2

我正在用 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
4

2 回答 2

6

items每次调用时,您都会设置一个新的空字典additem。因此,在添加新项目之前,它总是会擦除那里的所有内容。相反,items = {}在函数之外设置一次。这样做也没有意义self.item = str(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字典将在所有商店之间共享。上述方式为每个商店提供了自己的项目字典,因此它可以保留自己的项目记录。

于 2012-11-16T06:42:57.413 回答
0

即使这是几年前提出的观点,其他人也可能对此答案感兴趣。如果要在类中全局使用字典,则需要在使用类的部分中定义它。如果你在 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 ()
    ....
于 2019-09-11T20:09:04.053 回答