由于一些未知的原因,我的程序似乎创建了一个角色的实例,但没有分配_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
变量?这可能是一个简单的错误,我做了一些非常错误的事情,但提前感谢。
您正在错误地初始化超类。你也必须通过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(总是None
)的返回值赋给self._entity
是没有意义的。你可以做到
Entity.__init__(self, self._id)
要么
super().__init__(self._id)