3 回答

TA貢獻1826條經驗 獲得超6個贊
如果沒有看到其他班級,我肯定不能說任何話。但我認為問題可能是由承包商引起的。我看到的是您沒有將任何值傳遞給構造函數,但您正在嘗試使用 setter 函數設置它們的屬性。如果您希望其他人分配它,只需執行以下操作:
name = input("Enter name")
description = input("Enter description")
item = foo(name, description)
使用這種模式來分配其他用戶鍵入的變量。對于打印部分,請使用它。
for i in shoppingCart.cartItems:
print(i.getName())
如果您有任何問題隨時問。希望能幫助到你 :)
PS:當你更新時,我正在寫我的答案。我的回答仍然很重要。我認為你過于復雜了。

TA貢獻1874條經驗 獲得超12個贊
您的代碼的一個問題是在 ItemToPurchase 類中過度使用了 setter 函數。用構造函數設置值更好嗎?Java 課程經常教導您需要為所有屬性構建 getter 和 setter,但這不是最好的主意,并且會使代碼變得臃腫。只有在絕對需要的情況下才應該實施它們(在您的情況下,只需要更改 itemQuantity ,并且可能需要更改 itemPrice 以獲取優惠券或類似的東西)。此外,在 Python 中,您可以返回所有 ItemToPurchase 屬性的元組,而不是使用單獨的 getter:
def getAttributes(self):
return (self.itemName, self.itemDescription, self.itemPrice, self.itemQuantity)
然后你不需要在你的主類/主函數中返回所有這些訪問,你只需分配給局部變量并以這種方式構造 ItemToPurchase。然后你有更少的類訪問/函數調用,它更干凈。
另一個問題是 ShoppingCart 是如何構建的。雖然 Python 并不完全具有 Java 或 C++ 之類的“私有”屬性,但您可能希望在該類的 __init__ 中將 cartItems 列表設為“私有”(已損壞,但嘿,足夠接近),并構建一個檢索器:
self.__cartItems = []
def getCartSize():
return len(self.__cartItems)
def getCartItem(pos):
return self.__cartItems[pos].getAttributes()
然后恢復 ShoppingCart 中第一個 ItemToPurchase 的屬性:
myItem = getCartItem(0) #returns a tuple of all the data about that ItemToPurchase
print(myItem[0]) #prints the name of that item in the cart
Python 類和 Java 類之間最大的區別可能是“私有”概念的實現方式,以及 Python 返回語句的更大靈活性。

TA貢獻1794條經驗 獲得超7個贊
您發布的代碼有很多問題,但是打印項目的循環應該如下所示:
for item in shoppingCart.cartItems: print(item.getName())
添加回答
舉報