当代码仍在运行时,我是否需要始终需要在子类中使用 init 来实例化父类?

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

对于这个例子,我是否总是需要实例化父类,因为当我删除它时它仍然有效?

class Person:
    def __init__(self, name):
        self.name = name    

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value


class SubPerson(Person):

    # Do I need this an init call? If I remove this init call, it still runs
    def __init__(self, name):
        super().__init__(name)

    @property
    def name(self):
        return super().name 

    @name.setter
    def name(self, value):
        return super(SubPerson, SubPerson).name.__set__(self, value)


s = SubPerson("John") 
print(s.name) //John

谢谢!

python oop inheritance init super
2个回答
7
投票

绝对不是。典型的模式是子级可能有需要设置父级没有的额外字段,但如果您完全省略

__init__
方法,那么它会从父级继承它,这在您的情况下是正确的行为。


0
投票

一般来说,当需要初始化的属性多于超类的

__init__
方法中定义的属性时,或者如果我们想覆盖默认的超类初始化时,会在子类中定义
__init__
函数。在这种情况下,由于子类没有比父类更多的属性,因此没有必要在子类中添加
__init__
函数。

© www.soinside.com 2019 - 2024. All rights reserved.