如何使用类修复python中的"can't assign to function call"错误并允许它运行?



我正在尝试创建一个函数,用户可以在其中从商店购买食材。每个的价格是1美元,成分是苹果甜菜和胡萝卜。他们拥有的起始金额是 20 美元,所以每次他们购买一种成分时,他们购买多少都会下降。 因此,如果他们购买 3 个苹果,那么总数将剩下 17 美元,成分将添加到 iinventory 列表中。

def buyingredient(name, number:int):
global total
if number*prices[name] > total:
print("Not enough cash!")
elif name == 'apple':
int(iinventory.getApples()) += number
elif name == 'beets':
int(iinventory.getBeets()) += number
elif name == 'carrots':
int(iinventory.getCarrots()) += number
total -= number*prices[name]

class Iinventory:
def __init__(self):
self.apple_num=0
self.beets_num=0
self.carrots_num=0
def getApples(self):
return int(self.apple_num)
def getBeets(self):
return int(self.beets_num)
def getCarrots(self):
return int(self.carrots_num)
iinventory=Iinventory()

但是,当我运行这个时,我得到了 iinventory.getCarrots(( 部分的"无法分配给函数调用",所以我想知道如何处理此错误?

getApples()的目的是什么? 它返回转换为整数self.apple_num- 但它已经是一个整数。

如果您取消 getter 函数并直接访问属性,您的代码会更干净:

elif name == 'apple':
iinventory.apple_num += number

取而代之的是:

int(iinventory.getCarrots()) += number

你想要的是:

iinventory.carrots_num += number

您还可以创建一个方法addCarrots(),以便将内部属性与外部调用隔离开来,这在测试和代码可维护性方面具有优势。还可以将内部属性重命名为self._carrot_num,并使用@property修饰器创建方法carrot_num

部分:

int(iinventory.getCarrots()) += number 

翻译为:

int(0) += number 
# (0 is the current value)

int(0)是一个函数调用,分配给它是非法的。

因此,您应该做的是删除getWhatever方法并改用此方法:

iinventory.carrots_num += 1

由于函数返回命名属性,因此可以直接访问属性本身。另外,您不需要使用int(),因为它已经是一个整数

最新更新