实例变量继承问题

问题描述 投票:0回答:1

由于一些未知的原因,我的程序似乎创建了一个角色的实例,但没有分配_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变量?这可能是一个简单的错误,我做了一些非常错误的事情,但提前感谢。

python oop inheritance polymorphism instance
1个回答
1
投票

您正在错误地初始化超类。你也必须通过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)
© www.soinside.com 2019 - 2024. All rights reserved.