面向对象编程&Python中的重写方法

2024-06-11 20:45:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python完成OOP的实验。
赋值包括创建“ShoppingCart”和“Shop”类,其中“Shop”继承自“ShoppingCart”。在

Shopping Cart类中有一个构造函数,它不带参数,将“total”属性设置为零,并初始化名为“items”的空dict属性。
此外,还将创建以下方法“add_item”、“remove_item”(都需要类似的参数:item_name、quantity、price);add_item方法应将添加项的成本添加到total的当前值中,并在“items”dict中添加一个条目,以便键为“item”且值为“quantity”而“remove_item”方法则相反;而“checkout”方法接受“cash”并返回付款余额

“Shop”类有一个不带参数的构造函数,它将属性“quantity”初始化为100。
它还需要重写“remove_item”方法,以便调用不带参数的Shop的“remove_item”将数量减少1。在

我一直得到一个与'Shop'类中的super方法相关的堆栈跟踪错误。在

以下是我目前为止的代码:

class ShoppingCart:

   def __init__(self):
      self.total = 0
      self.items = {}

   def add_item(self, item_name, quantity, price):
      self.price = price
      self.item_name = item_name
      self.quantity = quantity
      if self.item_name in items:
        items[item_name] += quantity
      else:
        items[item_name] = quantity
      self.total += price*quantity

   def remove_item(self,item_name, quantity, price):
      self.price = price
      self.quantity = quantity
      self.item_name = item_name
      if self.item_name in items:
        self.total -= price*quantity
        del items[item_name]

   def checkout(self, cash_paid):
      self.cash_paid = cash_paid
      if cash_paid < self.total:
        return "Cash paid not enough"
      else:
        return cash_paid - self.total

class Shop(ShoppingCart):
   def __init__(self):
      super().__init__(quantity)
      self.__quantity = 100

   def __remove_item (self):
      self.__quantity -= 1

另外,我的add_item和remove_item方法似乎会引发错误,但我不知道我做错了什么。在

这些是实验室的单元测试,非常具有挑战性:

^{2}$

Tags: 方法nameself参数defitemscashshop
1条回答
网友
1楼 · 发布于 2024-06-11 20:45:13

I keep getting a stack trace error relating to the super method in the 'Shop' class

也许是因为。。。在

In the Shopping Cart class is a constructor that takes no arguments

并且您尝试将quantity作为参数传递给一个无参数构造函数

此外,quantity是一个未定义的变量


此外,为什么购物车会有一个单一的项目名称?或者仅是最后添加或删除的项目的大小/价格?在

def add_item(self, item_name, quantity, price):
    self.price = price
    self.item_name = item_name
    self.quantity = quantity

^{pr2}$

我想你想要一个Item类,你的购物车里有一个列表,而不是一个字典

原因是:你有一本只能存放单键键的字典。只要删除一个items[item_name],不管“数量”是多少,都将清空具有该名称的所有项目。在

相关问题 更多 >