实例变量继承问题

Instance variable inheritance problems

由于某些未知原因,我的程序似乎正在创建角色的实例,但没有分配 _id,即使 _id 甚至在 __init__ 中也有默认值。
我不确定这是为什么,是的,我是 python 的新手,正在尝试学习 OOP 和继承以确保我完全理解我看过的教程,我决定为此创建一种复杂的程序。

class Entity(object):
    def __init__(self, _id = None):
        self._id = _id
        self._pos = (0, 0)
        self._vel = (0, 0)

# --------------------------------------------------------------

class Character(Entity):
    def __init__(self, _id = None, _name = None):
        self._id, self._name = _id, _name
        self._entity = Entity.__init__(self._id)

# --------------------------------------------------------------

character = Character(0, 'End')

我得到的错误如下...

File "test.py", line 119, in <module>
    character = Character(0, 'End')
File "test.py", line 59, in __init__
    self._entity = Entity.__init__(self._id)
File "test.py", line 5, in __init__
    self._id = _id

AttributeError: 'int' object has no attribute '_id'

我认为这意味着当创建 Character/Entity 的新对象时它无法找到、初始化或定义 _id 变量?这可能是一个简单的错误,我做错了一些事情,但在此先感谢。

您正在错误地初始化 super-class。您还必须传递 self

self._entity = Entity.__init__(self, self._id)

不过,在大多数情况下使用super()更容易:

self._entity = super().__init__(self._id)

在这两种情况下:

character = Character(0, 'End')
print(vars(character))
# {'_id': 0, '_name': 'End', '_pos': (0, 0), '_vel': (0, 0), '_entity': None}

此外,将 init 的 return 值(总是 None)分配给 self._entity 是没有意义的。你可以做到

Entity.__init__(self, self._id)

super().__init__(self._id)