Python中的购物车和商品类,访问一个类对象并在另一个类中使用时出现问题

0 投票
1 回答
9527 浏览
提问于 2025-04-17 21:27

我正在尝试用Python 3写一个程序,这个程序的目的是把从一个叫做item的类创建的对象放到另一个叫shoppingCart的类里。我的想法是用shoppingCart类来创建一个item类的对象列表,同时还能访问item类的一些属性,比如价格和数量。

class item:
    def __init__(self,n,p,q):
        self.name = n
        self.price = p
        self.quantity = q
    def show(self):
        z = (str(self.name))
        print(z)
        self1 =("$")+(str(self.price))
        print(self1)
    def getName(self):
        return self.name
    def getPrice(self):
        return ("$") + str(self.price)
    def getQuantity(self):
        return self.quantity

class shoppingCart:
    def __init__(self, items):
        self.items = []
    def show(self):
        print(self.items)
    def addItem(self,item):
        if item not in self.items:
            self.items.append(item)
        else:
            item.q += 1
    def deleteItem(self,item):
        if item in self.items:
            self.items.remove(item)
        else:
            return print("Not in Cart")
    def checkOut (self):
        total = 0
        for i in self.items:
            price = i[1]
            total += price
        return total
item1 = item("Chocolate",5 ,3)
item2 = item("Bacon",15,1)
item3 =  item("Eggs",2,5)
c = shoppingCart([])
c.addItem(item1)
c.addItem(item2)
c.addItem(item3)
c.show()
print ("You have 3 items in your cart for a total of" (c.checkOut()))
c.removeItem(item3)
print ("You have 2 items in your cart for a total of" (c.checkOut()))

目前,上面的代码出现了两个错误。首先,c.show打印的是添加到购物车的对象的ID,而不是我们想要的信息。此外,checkOut方法在price = i[1]这一行出错,提示说item对象不支持索引。对于这个问题,如果有一些和我原始代码相似的替代解决方案,我会很欢迎!

1 个回答

1

首先,c.show() 会打印出列表,但你没有为你的类定义 __str____repr__,所以你只能看到默认的显示方式。你可以试试下面的代码:

def __str__(self):
    return str(self.name)

然后你可以:

print(map(str, self.items))

另外,你也可以使用你的 item.show 方法:

for i in self.items:
    i.show()

其次,在 checkOut 函数中,i 是一个 item 对象,你不能像访问列表那样去索引它。如果你想要获取它的价格,可以使用点号表示法:i.price

撰写回答