为了账号安全,请及时绑定邮箱和手机立即绑定

Python 新手:尝试从列表中打印对象属性

Python 新手:尝试从列表中打印对象属性

开心每一天1111 2022-06-02 10:37:34
import ShoppingClass as SCclass ShoppingCartPrinter:    shoppingCart = SC.ShoppingCart()    while(True):        item = SC.ItemToPurchase()        item.setName(input('\nEnter Name: '))        item.setDescription(input('\nSet Description: '))        item.setPrice(input('\nSet price: '))        item.setQuantity(input('\nSet Quantity: '))        shoppingCart.addItem(item)        for shoppingCart.cartItems.getName() in shoppingCart.cartItems:            print(shoppingCart.cartItems.getName())我正在尝试自学来自 java 的 python 并编写了这个简单的程序。我有另一个类,我用它来创建对象“项目”和“购物车”。在购物车的构造函数中,我创建了一个空列表,向其中添加对象。如果我尝试打印对象的属性,我不知道语法应该如何。我上面的内容显然是错误的。抱歉,如果这是一个简单的答案,我们将不胜感激。谢谢class ItemToPurchase:    def __init__(self,itemName ='none',itemDescription = 'none',itemPrice = 0,itemQuantity = 0):    self.itemName = itemName    self.itemDescription = itemDescription    self.itemPrice = itemPrice    self.itemQuantity = itemQuantitydef setName(self,newName):    self.itemName = newNamedef getName(self):    return self.itemNamedef setPrice(self, newPrice):    self.itemPrice = newPricedef getPrice(self):    return self.itemPricedef setQuantity(self, newQuantity):    self.itemQuantity = newQuantitydef getQuantity(self):    return self.itemQuantitydef setDescription(self,description):    self.itemDescription = descriptiondef getDescription(self):    return self.itemDescriptiondef printItemCost():    print(itemName+" "+itemQuantity+" @ $"+itemPrice+" = "+itemPrice*itemQuantity)def printItemDescription():    print(itemName+" "+itemDescription)class ShoppingCart:    def __init__(self,customerName = 'none', currentDate = 'January 1, 2016'):        self.customerName = customerName        self.currentDate = currentDate        self.cartItems = []    def addItem(self, item):        self.cartItems.append(item)    def getDate(self):        return self.currentDate    def getCustomerName(self):        return self.customerName
查看完整描述

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:当你更新时,我正在写我的答案。我的回答仍然很重要。我认为你过于复杂了。


查看完整回答
反对 回复 2022-06-02
?
HUWWW

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 返回语句的更大灵活性。


查看完整回答
反对 回复 2022-06-02
?
慕田峪9158850

TA贡献1794条经验 获得超8个赞

您发布的代码有很多问题,但是打印项目的循环应该如下所示:

for item in shoppingCart.cartItems:
    print(item.getName())


查看完整回答
反对 回复 2022-06-02
  • 3 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号