繁体   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