Python中的购物车和商品类,访问一个类对象并在另一个类中使用时出现问题
我正在尝试用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
。