首页 > 解决方案 > 将类实例存储在 python 列表中

问题描述

我正在尝试制作购物车类。其中一种方法将项目作为参数并将其附加到列表中。另一个函数计算列表中项目的总成本。我getCostOfItem在项目类中有一个方法。似乎我无法获取列表中项目实例的方法。我对Python完全陌生,有一些C++背景。

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` 

标签: python-3.x

解决方案


是的,您可以将类实例存储在列表中。您可能需要重新考虑您的班级设计,因为在您当前的状态下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

推荐阅读