将类实例存储在python列表中

时间:2019-11-27 15:42:22

标签: python-3.x

我正在尝试将购物车分类。其中一种方法将项目作为参数并将其附加到列表中。另一个函数计算列表中项目的总成本。我在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` 

1 个答案:

答案 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