实例变量继承问题
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)
由于某些未知原因,我的程序似乎正在创建角色的实例,但没有分配 _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)