搞亂 Python 并正在構建一個簡單的文本購物車。當我通過車盡量迭代,使用定義的__str__,它給我這個錯誤:
'CartItem' object is not subscriptable。我試圖了解這是在說什么,但未能找到有關此事的任何資訊。
這是相關的代碼:
class CartItem:
def __init__(self, name, price):
self.name = name
self.price = price
def __str__(self):
print(self.name " --> " self.price)
return "-- item printed --\n"
class Cart:
def __init__(self):
self.items = []
def __str__(self):
if(len(self.items) > 0):
index = 0
for item in self.items:
print(str(index) ": " item[index].name ' --> ' item[index].price)
index = 1
else:
print("No Items in Cart")
return "-- cart items printed--\n"
def addItem(self, cartItem):
self.items.append(cartItem)
print (cartItem.name ", costing $" cartItem.price ", has been added to cart\n")
print(self.items) # *should* print out the contents of the cart, but doesn't...
flarn = CartItem("flarn", "200.00")
print(flarn)
userCart = Cart()
userCart.addItem(flarn)
print(userCart) # if i remove this line, i get [<__main__.CartItem object at 0x....>]??
有人可以解釋該錯誤'CartItem' object is not subscriptable在此代碼的背景關系中意味著什么嗎?如果您能解釋去除print(userCart)收益的輸出,則加分。
uj5u.com熱心網友回復:
問題是item[index].name-CartItem不能像錯誤狀態那樣下標。您不需要使用索引,而是遍歷串列。您也可以簡化您的__str__()方法。
請注意,print()在__str__()方法內部使用是不好的。最好構造一個字串來描述購物車并回傳它。也應該有__repr__而不是__str__()for CartItem。當您在 list 等容器中列印專案時將使用它Cart.items。您也可以在構造時使用 Item 的字串表示形式Cart.__str__()
class CartItem:
def __init__(self, name, price):
self.name = name
self.price = price
def __repr__(self):
return f'{self.name} --> {self.price}'
class Cart:
def __init__(self):
self.items = []
def __str__(self):
if self.items:
return '\n'.join(f'{idx}: {item}' for idx, item in enumerate(self.items))
return "Empty Cart"
def addItem(self, cartItem):
self.items.append(cartItem)
print(f'{cartItem.name}, costing ${cartItem.price}, has been added to cart')
print(self.items) # *should* print out the contents of the cart, but doesn't...
userCart = Cart()
print(userCart)
flarn = CartItem("flarn", "200.00")
print(flarn)
userCart.addItem(flarn)
flarn = CartItem("flarn", "100.00")
print(flarn)
userCart.addItem(flarn)
print(userCart)
輸出:
Empty Cart
flarn --> 200.00
flarn, costing $200.00, has been added to cart
[flarn --> 200.00]
flarn --> 100.00
flarn, costing $100.00, has been added to cart
[flarn --> 200.00, flarn --> 100.00]
0: flarn --> 200.00
1: flarn --> 100.00
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/361578.html
上一篇:匹配物件然后計算學生成績的成績
