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、すべてのストア間で共有されるグローバル dict は 1 つだけです。上記の方法では、各ストアに独自のアイテム dict が与えられるため、独自のアイテムの独自の記録を保持できます。

于 2012-11-16T06:42:57.413 に答える