class Inventory(object):
def __init__(self):
self.inventory = {
'cash': 500,
'paycheck': 1,
'savings': 1000,
'current_car': 0,
'possible_cars': ['Chevy', 'Honda', 'BMW'],
'car_cost': [0, 100, 200],
'current_house': 0,
'possible_houses': ['apartment','townhouse','suite'],
'house_cost': [0, 150, 300],
'status': self.status()
}
def status(self):
while self.inventory['cash'] + self.inventory['savings'] > 0:
return True
我目前正在练习练习45中的“学习Python困难之路”。我创建了一个列出与游戏相关的项目的类,我已将这些键和值存储在我的<字典下strong> init 方法。我遇到麻烦的地方在我的最后一把钥匙内,而且它的价值 - “状态”键。
我希望这个值要做的是引用我的状态方法,只要我的玩家有一笔正数金额我已设置为返回true(我的游戏的其他部分将参考.inventory ['status'在执行之前检查它的真相。现在我已经快速完成了两行概念证明代码,以验证是否可以使用函数作为一个值 - 我在哪里挂了如何实现这一点一个类,特别是当我的词典在 init 中时。
我的错误:
Traceback (most recent call last):
File "ex45file1.py", line 151, in <module>
my_inv = Inventory() #TEST
File "ex45file1.py", line 80, in __init__
'status': status()
NameError: global name 'status' is not defined
我在哪里错了?
答案 0 :(得分:4)
首先,这不是您的代码产生的错误。在您的版本中,您有'status': status()
,但在SO上您写了'status': self.status()
。在任何情况下,如果你修复了你仍然有问题,
AttributeError: 'Inventory' object has no attribute 'inventory'
您收到该错误的原因是因为Python正在定义您的inventory
属性,但您致电status
必须引用inventory
给出一个返回值。
您甚至不想调用该函数并将返回值保存在字典中,因为这不允许您动态使用它。您应该更改它,以便不调用,只需保存引用。
class Inventory(object):
def __init__(self):
self.inventory = {
'cash': 500,
'paycheck': 1,
'savings': 1000,
'current_car': 0,
'possible_cars': ['Chevy', 'Honda', 'BMW'],
'car_cost': [0, 100, 200],
'current_house': 0,
'possible_houses': ['apartment','townhouse','suite'],
'house_cost': [0, 150, 300],
'status': self.status # <--- don't use parens ()
}
只需调用方法,
>>> my_inventory = Inventory()
>>> my_inventory.inventory['status']()
True
答案 1 :(得分:1)
我有一个不同的错误,但我相信解决方案是一样的:
class Inventory(object):
def __init__(self):
self.inventory = {
'cash': 500,
'paycheck': 1,
'savings': 1000,
'current_car': 0,
'possible_cars': ['Chevy', 'Honda', 'BMW'],
'car_cost': [0, 100, 200],
'current_house': 0,
'possible_houses': ['apartment','townhouse','suite'],
'house_cost': [0, 150, 300],
}
self.inventory['status'] = self.status()
def status(self):
while self.inventory['cash'] + self.inventory['savings'] > 0:
return True
我的错误是抱怨未在状态()中定义库存。
答案 2 :(得分:0)
我试过复制&amp;将代码粘贴到我的Python解释器中,我得到一个不同的错误:
>>> inv = new Inventory()
File "<stdin>", line 1
inv = new Inventory()
^
SyntaxError: invalid syntax
>>> inv = Inventory()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 13, in __init__
File "<stdin>", line 16, in status
AttributeError: 'Inventory' object has no attribute 'inventory'
问题是您在inventory
和status
之间存在循环依赖关系。您使用status
来定义inventory
,但status
需要先阅读inventory
才能返回...查看问题?