1
私は基本的なショッピングカートがあります。私は、書式設定文字列を学習しようとしています - カスタムオブジェクトを:私は何をしたいかhttps://pyformat.info/#custom_1文字列形式のカスタムオブジェクト
はこれです:
print("Your cart contains: {0:short}".format(cart))
は返す必要があります。
Your cart contains: cucumbers, tissues, tomatoes, toothpaste
マイ形式方法が間違っています。
Traceback (most recent call last):
File "C:/Users/Mark/PycharmProjects/main/main.py", line 54, in <module>
print("Your cart contains: {0:short}".format(cart))
TypeError: __format__ must return a str, not NoneType
は私のコード:
class Item(object):
def __init__(self, unq_id, name, price, qty, measure):
self.unq_id = unq_id
self.product_name = name
self.price = price
self.qty = qty
self.measure = measure
class Cart(object):
def __init__(self):
self.content = dict()
def __format__(self, format_type):
if format == 'short':
return ', '.join(item.name for item in self.content)
def add(self, item):
if item.unq_id not in self.content:
self.content.update({item.unq_id: item})
return
for k, v in self.content.get(item.unq_id).items():
if k == 'unq_id':
continue
elif k == 'qty':
total_qty = v.qty + item.qty
if total_qty:
v.qty = total_qty
continue
self.remove_item(k)
else:
v[k] = item[k]
def get_total(self):
return sum([v.price * v.qty for _, v in self.content.items()])
def get_num_items(self):
return sum([v.qty for _, v in self.content.items()])
def remove_item(self, key):
self.content.pop(key)
if __name__ == '__main__':
cart = Cart()
cart.add(Item(1, "Cucumbers", 1., 1, 'kg'))
cart.add(Item(2, "Tissues", 1., 2, 'dozen'))
cart.add(Item(3, "Tomatoes", 1., 5, 'box'))
cart.add(Item(4, "Toothpaste", 1., 5, 'box'))
# print("You have %i items in your cart for a total of $%.02f" % (cart.get_num_items(), cart.get_total()))
print("Your cart contains: {0:short}".format(cart))
# cart.remove_item(1)
# print("You have %i items in your cart for a total of $%.02f" % (cart.get_num_items(), cart.get_total()))