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角色),您仍然应该避免这样做。如果以后你想有两个玩家,可能会导致一些你不容易理解的错误。您应该只对您实际想要在实例之间共享的属性使用类属性。好的,谢谢。最后我决定安全起见,举个例子。哎呀,这是个打字错误。它在代码中有这个。