对于这个例子,我是否总是需要实例化父类,因为当我删除它时它仍然有效?
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
谢谢!
绝对不是。典型的模式是子级可能有需要设置父级没有的额外字段,但如果您完全省略
__init__
方法,那么它会从父级继承它,这在您的情况下是正确的行为。
一般来说,当需要初始化的属性多于超类的
__init__
方法中定义的属性时,或者如果我们想覆盖默认的超类初始化时,会在子类中定义 __init__
函数。在这种情况下,由于子类没有比父类更多的属性,因此没有必要在子类中添加 __init__
函数。