我试图用Python在OOP上完成一个实验室 该作业包括创建一个'ShoppingCart'和'Shop'类,其中'Shop'继承自'ShoppingCart'。
在Shopping Cart类中,是一个不带参数的构造函数,并将'total'属性设置为零,并初始化一个名为'items'的空dict属性。
还要创建以下方法'add_item','remove_item'(两者都需要类似的参数:item_name,quantity,price); 'add_item'方法应该将添加项的成本添加到当前总值中,并在'items'字典中添加一个条目,使得键为'item_name',值为'quantity',而'remove_item'方法反过来;以及“结账”方法,该方法接收'cash_paid'并从付款
'Shop'类有一个不带参数的构造函数,并在100处初始化属性'quantity' 还需要覆盖'remove_item'方法,以便调用没有参数的Shop的'remove_item'将数量减1。
我在' Shop'中不断收到与超级方法相关的堆栈跟踪错误。类。
到目前为止,这是我的代码:
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方法似乎也会引发错误,但我不知道自己做错了什么。
这些是实验室的单元测试,它真的很有挑战性:
import unittest
class ShoppingCartTestCases(unittest.TestCase):
def setUp(self):
self.cart = ShoppingCart()
self.shop = Shop()
def test_cart_property_initialization(self):
self.assertEqual(self.cart.total, 0, msg='Initial value of total not correct')
self.assertIsInstance(self.cart.items, dict, msg='Items is not a dictionary')
def test_add_item(self):
self.cart.add_item('Mango', 3, 10)
self.assertEqual(self.cart.total, 30, msg='Cart total not correct after adding items')
self.assertEqual(self.cart.items['Mango'], 3, msg='Quantity of items not correct after adding item')
def test_remove_item(self):
self.cart.add_item('Mango', 3, 10)
self.cart.remove_item('Mango', 2, 10)
self.assertEqual(self.cart.total, 10, msg='Cart total not correct after removing item')
self.assertEqual(self.cart.items['Mango'], 1, msg='Quantity of items not correct after removing item')
def test_checkout_returns_correct_balance(self):
self.cart.add_item('Mango', 3, 10)
self.cart.add_item('Orange', 16, 10)
self.assertEqual(self.cart.checkout(265), 75, msg='Balance of checkout not correct')
self.assertEqual(self.cart.checkout(25), 'Cash paid not enough', msg='Balance of checkout not correct')
def test_shop_is_instance_of_shopping_cart(self):
self.assertTrue(isinstance(self.shop, ShoppingCart), msg='Shop is not a subclass of ShoppingCart')
def test_shop_remove_item_method(self):
for i in range(15):
self.shop.remove_item()
self.assertEqual(self.shop.quantity, 85)
答案 0 :(得分:0)
我不断收到与“Shop”类中的super方法相关的堆栈跟踪错误
也许是因为......
在Shopping Cart类中是一个不带参数的构造函数
并且您尝试将数量作为参数传递给无参数构造函数
此外,quantity
是一个未定义的变量
此外,为什么购物车会有单一的商品名称?或者只是最后添加或删除的项目的大小/价格?
def add_item(self, item_name, quantity, price):
self.price = price
self.item_name = item_name
self.quantity = quantity
def remove_item(self,item_name, quantity, price):
self.price = price
self.quantity = quantity
self.item_name = item_name
我想你想要一个Item
课程,你的购物车里面有一个列表,而不是字典
原因是:你有一个只能容纳单键的词典。只要删除一个items[item_name]
,无论“数量”如何,都会清空所有具有该名称的项目。