Python的新功能:尝试从列表打印对象属性

Python的新功能:尝试从列表打印对象属性,python,Python,我试图自学来自java的python,并编写了这个简单的程序。我有另一个类,用于创建对象“item”和“shopping cart”。在购物车的构造函数中,我创建了一个空列表,向其中添加对象。如果我试图打印对象的属性,我不知道语法应该是什么。我上面所说的显然是错的。 抱歉,如果这是一个简单的答案,任何帮助都将不胜感激。 谢谢 如果不去看另一个班,我肯定什么都不能说。但我认为问题可能是由承包商造成的。我看到的是,您没有将任何值传递给构造函数,而是尝试使用setter函数设置它们的属性。如果您想让其

我试图自学来自java的python,并编写了这个简单的程序。我有另一个类,用于创建对象“item”和“shopping cart”。在购物车的构造函数中,我创建了一个空列表,向其中添加对象。如果我试图打印对象的属性,我不知道语法应该是什么。我上面所说的显然是错的。 抱歉,如果这是一个简单的答案,任何帮助都将不胜感激。 谢谢


如果不去看另一个班,我肯定什么都不能说。但我认为问题可能是由承包商造成的。我看到的是,您没有将任何值传递给构造函数,而是尝试使用setter函数设置它们的属性。如果您想让其他人分配它,只需执行以下操作:

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
for i in shoppingCart.cartItems:
    print(i.getName())
使用这种模式分配其他用户键入的变量。 对于打印部分,请使用此选项

name = input("Enter name")
description = input("Enter description")
item = foo(name, description)
如果您有任何问题,请随时提问。希望有帮助:)


PS:当你更新时,我正在写我的答案。不过,我的回答仍然很重要。我想你把它弄得太复杂了。

如果不看另一节课,我肯定什么也说不出来。但我认为问题可能是由承包商造成的。我看到的是,您没有将任何值传递给构造函数,而是尝试使用setter函数设置它们的属性。如果您想让其他人分配它,只需执行以下操作:

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
for i in shoppingCart.cartItems:
    print(i.getName())
使用这种模式分配其他用户键入的变量。 对于打印部分,请使用此选项

name = input("Enter name")
description = input("Enter description")
item = foo(name, description)
如果您有任何问题,请随时提问。希望有帮助:)


PS:当你更新时,我正在写我的答案。不过,我的回答仍然很重要。我认为您把它复杂化了。

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

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
for i in shoppingCart.cartItems:
    print(i.getName())

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

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
for i in shoppingCart.cartItems:
    print(i.getName())

代码的一个问题是在ItemToPurchase类中过度使用setter函数。最好用构造函数设置值?Java中的课程经常教导您需要为所有属性构建getter和setter,但这并不是最好的主意,而且会使代码过于臃肿。只有在绝对需要的情况下,才应该实现它们(在您的情况下,只需要更改itemQuantity,可能还需要更改优惠券的itemPrice之类的东西)。此外,在Python中,您可以返回所有ItemToPurchase属性的元组,而不是使用独立的getter:

for item in shoppingCart.cartItems:
    print(item.getName())
然后,您不需要在主类/主函数中返回所有这些访问,您只需要分配到局部变量,并以这种方式构造ItemToPurchase。这样,类访问/函数调用就少了很多,更干净了

另一个问题是ShoppingCart是如何构造的。虽然Python并不完全具有“私有”属性,如Java或C++,但您可能希望在该类中的Sy-InITyjava中使CARTITEMs列表“私有”(MULD,但HEY,足够接近),并构建一个检索器:

def getAttributes(self):
    return (self.itemName, self.itemDescription, self.itemPrice, self.itemQuantity)
然后,要恢复ShoppingCart中第一个ItemToPurchase的属性:

    self.__cartItems = []

def getCartSize():
    return len(self.__cartItems)

def getCartItem(pos):
    return self.__cartItems[pos].getAttributes()

Python类和Java类之间最大的区别可能在于“private”的概念是如何实现的,以及Python返回语句的更大灵活性。

代码中的一个问题是在ItemToPurchase类中过度使用setter函数。最好用构造函数设置值?Java中的课程经常教导您需要为所有属性构建getter和setter,但这并不是最好的主意,而且会使代码过于臃肿。只有在绝对需要的情况下,才应该实现它们(在您的情况下,只需要更改itemQuantity,可能还需要更改优惠券的itemPrice之类的东西)。此外,在Python中,您可以返回所有ItemToPurchase属性的元组,而不是使用独立的getter:

for item in shoppingCart.cartItems:
    print(item.getName())
然后,您不需要在主类/主函数中返回所有这些访问,您只需要分配到局部变量,并以这种方式构造ItemToPurchase。这样,类访问/函数调用就少了很多,更干净了

另一个问题是ShoppingCart是如何构造的。虽然Python并不完全具有“私有”属性,如Java或C++,但您可能希望在该类中的Sy-InITyjava中使CARTITEMs列表“私有”(MULD,但HEY,足够接近),并构建一个检索器:

def getAttributes(self):
    return (self.itemName, self.itemDescription, self.itemPrice, self.itemQuantity)
然后,要恢复ShoppingCart中第一个ItemToPurchase的属性:

    self.__cartItems = []

def getCartSize():
    return len(self.__cartItems)

def getCartItem(pos):
    return self.__cartItems[pos].getAttributes()

Python类和Java类之间最大的区别可能在于“private”的概念是如何实现的,以及Python返回语句的更大灵活性。

我们需要看到另一个类,因为它包含有问题的项目,以便帮助您。请提供刚刚更新的
ShoppingCart
code,谢谢你不会只在Java的类级别编写所有代码;为什么要用Python来做呢?虽然我真的不明白为什么你需要一个ShoppingCartPrinter类,而不仅仅是一个函数。尝试在Python中使用@property我们需要看到另一个类,因为它包含有问题的项目,以便帮助你。请提供刚刚更新的
ShoppingCart
code,谢谢你不会只在Java的类级别编写所有代码;为什么要用Python来做呢?虽然我真的不明白为什么你需要一个ShoppingCartPrinter类,而不仅仅是一个函数。试着在pythonThank中使用@property作为你的输入!那么在python中,setter的使用是多余的吗?或者仅针对此场景?它不是多余的,您可以像在Java中一样使用它,但是对于这种类型的场景,当您在运行时分配属性时,这是不必要的。谢谢您的输入!那么在python中,setter的使用是多余的吗?或者仅仅针对这个场景?它不是多余的,您可以像在Java中一样使用它,但是对于这种类型的场景,当您在ru中分配属性时