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
答案 0 :(得分:2)
我肯定不能不见其他同学就说什么。但是我认为问题可能是由建设者引起的。我看到的是您没有将任何值传递给构造函数,而是尝试使用setter函数设置其属性。如果您希望其他人分配它,请执行以下操作:
name = input("Enter name")
description = input("Enter description")
item = foo(name, description)
使用这种模式来分配其他用户键入的变量。 对于印刷部分,请使用它。
for i in shoppingCart.cartItems:
print(i.getName())
如有任何疑问,请随时提问。希望对您有所帮助:)
PS:更新时,我正在写我的答案。我的答案仍然很重要。我认为您过于复杂了。
答案 1 :(得分:0)
您发布的代码有很多错误之处,但是您打印项目的循环应如下所示:
titles = [i['title'] for i in soup.select("a:has(img) + [href*='/title/tt'][title]")]
答案 2 :(得分:0)
代码的一个问题是在ItemToPurchase类中过多使用了setter函数。最好使用构造函数设置值? Java课程通常会教您需要为所有属性构建getter和setter,但这不是最好的主意,并且会使代码变得肿。只有在绝对需要时才应实施它们(在您的情况下,只需要更改itemQuantity,也许还需要更改coupon的itemPrice或类似的价格)。此外,在Python中,您可以返回所有ItemToPurchase属性的元组,而不是具有单个getter:
def getAttributes(self):
return (self.itemName, self.itemDescription, self.itemPrice, self.itemQuantity)
然后,您不需要在主类/ main函数中返回所有这些访问,只需分配给局部变量并以这种方式构造ItemToPurchase。这样一来,类访问/函数调用就会减少很多,这要干净得多。
另一个问题是ShoppingCart的构造方式。尽管Python并不完全具有Java或C ++之类的'private'属性,但您可能希望在该类的__init___中将cartItems列表设为“ private”(有错,但足够接近),并构建一个检索器:
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返回语句的更大灵活性。