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

import ShoppingClass as SC

class 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 = itemQuantity


def setName(self,newName):

    self.itemName = newName


def getName(self):

    return self.itemName


def setPrice(self, newPrice):

    self.itemPrice = newPrice


def getPrice(self):

    return self.itemPrice


def setQuantity(self, newQuantity):

    self.itemQuantity = newQuantity


def getQuantity(self):

    return self.itemQuantity


def setDescription(self,description):

    self.itemDescription = description


def getDescription(self):

    return self.itemDescription


def 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


开心每一天1111
浏览 142回答 3
3回答

跃然一笑

如果没有看到其他班级,我肯定不能说任何话。但我认为问题可能是由承包商引起的。我看到的是您没有将任何值传递给构造函数,但您正在尝试使用 setter 函数设置它们的属性。如果您希望其他人分配它,只需执行以下操作:name = input("Enter name")description = input("Enter description")item = foo(name, description)使用这种模式来分配其他用户键入的变量。对于打印部分,请使用它。for i in shoppingCart.cartItems:    print(i.getName())如果您有任何问题随时问。希望能帮助到你 :)PS:当你更新时,我正在写我的答案。我的回答仍然很重要。我认为你过于复杂了。

HUWWW

您的代码的一个问题是在 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 ItemToPurchaseprint(myItem[0])         #prints the name of that item in the cartPython 类和 Java 类之间最大的区别可能是“私有”概念的实现方式,以及 Python 返回语句的更大灵活性。

慕田峪9158850

您发布的代码有很多问题,但是打印项目的循环应该如下所示:for item in shoppingCart.cartItems:     print(item.getName())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python