覆盖 __init__ 时,我会在开头或结尾调用基数 class 的 __init__ 吗?
When overwriting __init__ will I call __init__ of base class at the beginning or end?
我有以下简短示例,其中我从 Base
继承了 class A
并覆盖了 __init__
。在 __init__
中调用 Base.__init__
。
class A(Base):
def __init__(self):
super(A, self).__init__()
... my initialisation ...
是否有规则先调用 Base 的 __init__
(需要时)然后初始化其余部分,还是应该反过来?
有时我需要调用 __init__
然后完成其余的工作,有时我需要反过来。也有一些情况我必须写一些初始化,然后调用基class的__init__
,然后做一些最终的初始化。
也许给自己一个答案:阅读基础文档class,或者如果没有则研究代码。
有什么办法吗?或者你如何记录这个?
不,关于在哪里调用它,或者是否调用它,没有任何规则。在对您的具体情况有意义的地方调用它。
换句话说,super(A, self).__init__()
只是另一个方法调用,尽管它专门使用从基 class 中查找的方法。像对待您进行的任何其他方法调用一样对待它,因此在需要时将其称为 。
我有以下简短示例,其中我从 Base
继承了 class A
并覆盖了 __init__
。在 __init__
中调用 Base.__init__
。
class A(Base):
def __init__(self):
super(A, self).__init__()
... my initialisation ...
是否有规则先调用 Base 的 __init__
(需要时)然后初始化其余部分,还是应该反过来?
有时我需要调用 __init__
然后完成其余的工作,有时我需要反过来。也有一些情况我必须写一些初始化,然后调用基class的__init__
,然后做一些最终的初始化。
也许给自己一个答案:阅读基础文档class,或者如果没有则研究代码。
有什么办法吗?或者你如何记录这个?
不,关于在哪里调用它,或者是否调用它,没有任何规则。在对您的具体情况有意义的地方调用它。
换句话说,super(A, self).__init__()
只是另一个方法调用,尽管它专门使用从基 class 中查找的方法。像对待您进行的任何其他方法调用一样对待它,因此在需要时将其称为 。