python-3.x - 将类实例存储在 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`
解决方案
是的,您可以将类实例存储在列表中。您可能需要重新考虑您的班级设计,因为在您当前的状态下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
推荐阅读
- gcloud - 由于大小或权限,GCloud 自定义图片上传失败
- python - 是否可以在安装 Anaconda 的同时保持预安装的 Python 和 PyCharm 完好无损?
- foreign-keys - 多对一关系不可选择
- powershell - 如何知道 BackupToAAD-BitLockerKeyProtector cmdlet 返回成功或失败?
- java - 在 Maven 发布期间没有提供 SCM URL 来执行发布
- php - 当我尝试要求“作曲家需要 unisharp/laravel-ckeditor”时,它给了我这个。是什么原因?
- php - 实现全局函数以连接到数据库并在 PHP 中执行查询
- javascript - 我可以将桌面浏览器中的缩放功能限制在一个范围内吗?
- python - Discord没有在循环中正确发送所有内容
- r - 填充 R 数据框中的多列