我正在尝试将购物车分类。其中一种方法将项目作为参数并将其附加到列表中。另一个函数计算列表中项目的总成本。我在item类中有一个getCostOfItem
方法。看来我无法获得列表中项目实例的方法。我对具有 C ++ 背景的 Python 完全陌生。
from item import item
class Cart:
def __init__(self,customerName,CartID, totalOrderAmount=0,currentSize =0):
self.CART = []
self.customerName = customerName
self.CartID = CartID
self.totalOrderAmount = totalOrderAmount
self.currentSize = currentSize
def addItemToCart(self,item):
self.CART.append(item)
def TotalCost(self):
for i in self.CART:
self.totalOrderAmount += i.getCostOfItem() # problem`
答案 0 :(得分:0)
是的,您可以将类实例存储在列表中。您可能需要重新考虑类设计,因为在当前状态下多次调用TotalCost
会不断增加购物车的价格。相反,您可以在将商品附加到购物车的同时将每个商品的成本添加到购物车总计中。
然后您可以使用TotalCost
来返回当前成本,因为每次添加项目都会增加当前成本。您还可以添加重新计算购物车的成本,例如,如果某件商品的价格发生了变化(比如说某件商品有些折扣)。那么您可以重新计算购物车的总费用。
下面只是一个简单的演示,我没有在类设计上花任何时间,它只是一个示例,以突出显示可以将类实例包含在列表中
class Cart:
def __init__(self, customerName, CartID, totalOrderAmount=0, currentSize=0):
self.CART = []
self.customerName = customerName
self.CartID = CartID
self.totalOrderAmount = totalOrderAmount
self.currentSize = currentSize
def addItemToCart(self, item: 'item'):
self.CART.append(item)
self.totalOrderAmount += item.getCostOfItem()
def TotalCost(self):
return self.totalOrderAmount
def recalculate_total(self):
self.totalOrderAmount = 0
for i in self.CART:
self.totalOrderAmount += i.getCostOfItem()
class item:
def __init__(self, name, quantity, cost, ItemType):
self.name = name
self.quantity = quantity
self.cost = cost
self.ItemType = ItemType
def getCostOfItem(self):
return self.cost * self.quantity
cart = Cart('Chris', 132)
cart.addItemToCart(item('book', 1, 10, 'misc'))
cart.addItemToCart(item('toy', 1, 5, 'misc'))
cart.addItemToCart(item('car', 2, 100, 'misc'))
print(cart.TotalCost())
car = cart.CART[2]
car.cost = int(car.cost / 100 * 90 ) # reduce the cost of the car by 10% discount
cart.recalculate_total()
print(cart.TotalCost())
输出
215
195