问题描述
如果父类和子类需要相同的 __init__
,我可以想到两种主要方法来做到这一点...
class Parent:
def __init__(self,attr1,attr2):
self.attr1 = attr1
self.attr2 = attr2
class Child(Parent):
def __init__(self,attr2):
super().__init__(attr1,attr2)
def do_something(self):
return self.attr1 + self.attr2
2.只需继承__init__
class Parent:
def __init__(self,attr2):
self.attr1 = attr1
self.attr2 = attr2
class Child(Parent):
def do_something(self):
return self.attr1 + self.attr2
这里有首选方法吗?基本继承应该有效(并且似乎有效),但明确说明对象实例(是否继承)的初始化方式是否更好?
我问这个问题的主要原因是因为我从未真正见过 __init__
被跳过的例子,但这可能只是因为通常需要更改或添加 __init__
行为。
(我已经尝试搜索/阅读了很多其他问题,但找不到答案,如果这是重复的,我深表歉意。)
谢谢!
解决方法
如果 Child
中的构造函数相同,则没有理由覆盖它。所以我肯定会选择解决方案 2,因为解决方案 1 只添加了代码复制。如果您遵循方法 1,则 Parent.__init__
的更改也需要更改所有子类 __init__
。
在这两种解决方案中,您都忘记从 self
访问属性(它应该是 self.attr1
,而不是 attr1
)。