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条经验 获得超8个赞
您发布的代码有很多问题,但是打印项目的循环应该如下所示:
for item in shoppingCart.cartItems: print(item.getName())
添加回答
举报
