Python 玩家没有属性';库存';
我正在尝试制作一个游戏,我为玩家添加了一个类,如下所示:Python 玩家没有属性';库存';,python,python-3.x,Python,Python 3.x,我正在尝试制作一个游戏,我为玩家添加了一个类,如下所示: class Player(object): def __init__(self,inventory): self.inventory = [] 现在,当我试图以任何方式调用Player.inventory时,它会给我一个错误提示: 玩家没有属性“库存” 我不确定我做错了什么,因为我还有其他类,比如这个类,它们的格式完全相同 class Room(object): def __init__(self,nam
class Player(object):
def __init__(self,inventory):
self.inventory = []
现在,当我试图以任何方式调用Player.inventory
时,它会给我一个错误提示:
玩家没有属性“库存”
我不确定我做错了什么,因为我还有其他类,比如这个类,它们的格式完全相同
class Room(object):
def __init__(self,name,items):
self.name = name
self.items = []
这一个工作得很好,但我看不出代码中有什么不同。这是因为
库存
只存在于播放器
类的实例化对象中
如果调用Player.inventory
,则它仅在声明为类级属性时才起作用,也就是说:
class Player(object):
inventory = []
但是,您应该小心,因为如果您这样做,那么
inventory
对于Player
的所有实例都是常见的。在本例中,这可能不是您想要的。因为您使用的是Python 3,所以不再需要对对象进行子类化。您是在调用类Player
上的.inventory
,还是调用Player
的实例?前者会导致您看到的错误,后者不会
另一方面,您还过度编写了输入参数inventory
class Player:
def __init__(self, inventory):
self.inventory = inventory
# here we instantiate an instance of Player
p = Player([])
p.inventory
# returns:
[]
# here we are calling the class directly
Player.inventory
# raises:
AttributeError: type object 'Player' has no attribute 'inventory'
创建Player类的实例并访问该实例的资源清册
p=玩家(5)
打印(p.库存)
另外,您的def uuu init uuuuuu缺少一个“:”属性绑定到类的新实例,而不是类本身:Player(“某些库存”)。库存是一个类,正如您所定义的,没有名为inventory
的类级属性,也许不应该有。记住,类就像是创建实例的模板。同样,在Python3中,类自动从对象派生。你不需要(物体)。另外,您正在将self.inventory分配给一个列表,而忽略了参数。@AaronBentley有些人建议您还是这样做,因为这样做是为了显式的,并且使您的代码更易于移植到Python2。作为一个不喜欢深层继承层次结构的人,我个人更喜欢classmyclass:
的外观。我最讨厌的是空括号,所以class MyClass():
让我不寒而栗。Aaron,这是否意味着我的类可以用空括号代替“object”?好的,我明白了。我认为在这种情况下应该没问题,因为Player只会有一个Player()的实例(即Player角色),您仍然应该避免这样做。如果以后你想有两个玩家,可能会导致一些你不容易理解的错误。您应该只对您实际想要在实例之间共享的属性使用类属性。好的,谢谢。最后我决定安全起见,举个例子。哎呀,这是个打字错误。它在代码中有这个。