显式设置继承,不变 __init__ 与在 Python 中跳过它
Explicitly setting inherited, unchanged __init__ vs skipping it in Python
如果 parent class 和 child class 需要相同的 __init__
,我可以想到两种主要的方法...
1.使用 super() 显式声明 __init__
class Parent:
def __init__(self, attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2
class Child(Parent):
def __init__(self, attr1, attr2):
super().__init__(attr1, attr2)
def do_something(self):
return self.attr1 + self.attr2
2。就继承__init__
class Parent:
def __init__(self, attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2
class Child(Parent):
def do_something(self):
return self.attr1 + self.attr2
这里有更好的方法吗?基本继承应该有效(而且似乎有效),但最好明确说明 object(是否继承)的实例是如何初始化的?
我问的主要原因是因为我从来没有真正看到 __init__
被跳过的例子,但这可能只是因为通常需要更改或添加 __init__
行为.
(我已经 searching/reading 尝试了很多其他问题,但找不到答案,如果这是重复的,我们深表歉意。)
谢谢!
如果 Child
中的构造函数相同,则没有理由重写它。所以我肯定会选择解决方案 2,因为解决方案 1 除了代码复制之外什么也没增加。如果您遵循方法 1,Parent.__init__
中的更改也需要更改所有子类 __init__
。
尽管在这两种解决方案中,您都忘记了从 self
访问属性(应该是 self.attr1
,而不是 attr1
)。
如果 parent class 和 child class 需要相同的 __init__
,我可以想到两种主要的方法...
1.使用 super() 显式声明 __init__
class Parent:
def __init__(self, attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2
class Child(Parent):
def __init__(self, attr1, attr2):
super().__init__(attr1, attr2)
def do_something(self):
return self.attr1 + self.attr2
2。就继承__init__
class Parent:
def __init__(self, attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2
class Child(Parent):
def do_something(self):
return self.attr1 + self.attr2
这里有更好的方法吗?基本继承应该有效(而且似乎有效),但最好明确说明 object(是否继承)的实例是如何初始化的?
我问的主要原因是因为我从来没有真正看到 __init__
被跳过的例子,但这可能只是因为通常需要更改或添加 __init__
行为.
(我已经 searching/reading 尝试了很多其他问题,但找不到答案,如果这是重复的,我们深表歉意。)
谢谢!
如果 Child
中的构造函数相同,则没有理由重写它。所以我肯定会选择解决方案 2,因为解决方案 1 除了代码复制之外什么也没增加。如果您遵循方法 1,Parent.__init__
中的更改也需要更改所有子类 __init__
。
尽管在这两种解决方案中,您都忘记了从 self
访问属性(应该是 self.attr1
,而不是 attr1
)。