很抱歉,如果我的问题含糊不清,请先在stackoverflow上发帖。我想我在这里忽略了一些非常基本的东西,在课堂上经历了几个教程,但是在我的生活中无法找出我出错的地方。我的代码如下: -
class catalogue(object):
def __init__(self, catalogueitem):
self.catalogueitem = catalogueitem
self.colors = []
self.stock = "No Stock"
def setStock(self, stock):
if self.stock == "No Stock":
self.stock = stock
class shop(object):
def __init__(self, items):
self.shopItems = []
for item in items:
self.shopItems.append(catalogue(item))
def setStock(self, stock, item="purse"):
self.shopItems.catalogue(item).setStock(stock)
newshop = shop( ["purse","handbag","wallet", "clutchbag"] )
newshop.setStock(10, "handbag")
基本上我要做的是从类商店中调用类目录中的方法,并在实例newshop中使用新的库存值10更新项目。我想我对如何做到这一点缺乏基本的了解,而且我认为我忽略了一些非常基本的东西,有人能帮我解决一下吗?
由于 贝蒂
答案 0 :(得分:1)
致电时
self.shopItems.catalogue(item).setStock(stock)
您正在尝试调用self.shopItems对象的方法目录。问题是,self.shopItems是一个列表。我想你应该尝试使用这样的代码:
class catalogue(object):
def __init__(self, catalogueitem):
self.catalogueitem = catalogueitem
self.colors = []
self.stock = "No Stock"
def setStock(self, stock):
if self.stock == "No Stock":
self.stock = stock
class shop(object):
def __init__(self, items):
self.shopItems = []
for item in items:
self.shopItems.append(catalogue(item))
def setStock(self, stock, item="purse"):
c = catalogue(item) #Instance the catalogue class
c.setStock(stock) #Call the method setStock
self.shopitems.append(c) #this adds the items into the instance, but # the original objects created by __init__ are still there, i.e. they've not # updated just added.
newshop = shop( ["purse","handbag","wallet", "clutchbag"] )
newshop.setStock(10, "handbag")
仅从商店类别更改了setStock的功能。
编辑1:
当你做self.shopItems = catalog(item)时,你会覆盖你拥有的东西 在列表中。你应该改为:
self.shopItems.append(catalogue(item))
并在最后一个元素后调用该方法:
self.shopItems[-1].setStock(stock)
结果是:
def setStock(self, stock, item="purse"):
self.shopItems.append(catalogue(item))
self.shopItems[-1].setStock(stock)
编辑2:
好的,要更新现有项目,首先应检查它们是否存在,遍历列表:
def setStock(self, stock, item="purse"):
c = catalogue(item) #Instance the catalogue class
c.setStock(stock) #Call the method setStock
index = -1
i = 0 #index
for shItem in self.shopItems:
if shItem.catalogueitem == item:
index = i #Saves the index to update
break #Breaks out of loop
i += 1
if index == -1:
self.shopitems.append(c) #index wasn't updated, the item is new
else:
self.shopitems[index] = (c) #replaces the item info
答案 1 :(得分:0)
首先,您希望能够按名称查找商品。用于此的适当数据结构是字典(而不是列表)。因此,这会将商店的构造函数更改为:
def __init__(self, items):
self.shopItems = {}
for item in items:
self.shopItems[item] = catalogue(item)
然后,很容易更新商店项目:
self.shopItems[item].setStock(stock)
每个shopItem 已经一个目录实例,因此您可以直接在其上调用setStock()
。你应该先检查是否有这样的项目,否则你会抛出异常。例如,如果您致电newshop.setStock(10, 'bag')
- 则没有此类项目。您可以按照以下方式防范:
def setStock(self, stock, item="purse"):
if item not in self.shopItems:
self.shopItems[item] = catalogue(item)
self.shopItems[item].setStock(stock)