Python 继承问题

Python inheritance issues

提问人:Turducken 提问时间:9/7/2023 更新时间:9/7/2023 访问量:39

问:

我有一个类 Person,其中包含许多属性,其中一个是库存属性:

class Person:
        def __init__(self):
            #Private Attributes
            self._inventory = []

我有一个子类 Male,它继承自 Person 类:

class Male(Person):
        def __init__(self, *args, **kwargs):
            super(Person, self).__init__()

Person 类内部是一个 HasItem 方法:

def HasItem(self, key):
            item = next(filter(lambda x: key in x.Key, self._inventory), None)

            if (not item == None):
                if (item.Quantity == 0):
                    self._inventory.remove(next(filter(lambda x: item.Key in x.Key, self._inventory)))
                    return False
                else:
                    return True
            else:
                return False

我还有一个名为 NPC 的类,它将 Person 对象作为参数:

class NPC():
        def __init__(self, person, *args, **kwargs):
            self._person = person

        @property
        def Person(self):
            return self._person 

因此,我实例化了NPC的实例:

npc = NPC(Male(Person()))

然后打电话给 NPC。Person.HasItem(“Key”),此时我收到一个错误,说“'Male'对象没有属性'_inventory'”

由于 Male 继承自 Person,而 HasItem 方法位于 Person 中,因此我希望它使用 Person 的self._inventory。然而,它似乎希望 Male 也具有一种属性self._inventory这将使整个继承点变得毫无用处。那么我在这里做错了什么?

Python 继承 方法 属性

评论

1赞 user2357112 9/7/2023
super采用当前类,而不是父类(或者在 Python 3 中,您可以省略参数)。
0赞 Turducken 9/7/2023
哦,为了爱......[插入阿拉丁我在这里感到羞怯的模因]......谢谢

答:

1赞 Mohil Patel 9/7/2023 #1

问题出在类方法上。超级接受子类名称,而不是父类名称和对象。 可能的修复:Male__init__

class Male(Person):
    def __init__(self, *args, **kwargs):
        super(Male, self).__init__()

class Male(Person):
    def __init__(self, *args, **kwargs):
        super().__init__()