从__init __()调用重写方法是否安全?

Vai*_*pai 10 python inheritance constructor

这是这个问题的后续行动:

有效的Java第2版,第17项:继承的设计和文档,或者禁止它:

为了允许继承,类必须遵守一些限制.构造函数不得直接或间接调用可覆盖的方法.如果违反此规则,将导致程序失败.父类的构造子类构造函数之前运行,所以子类构造函数运行之前在子类中重写方法将被调用.如果重写方法依赖于子类构造函数执行的任何初始化,则该方法将不会按预期运行.

由于我们只是要触及Java构造函数的初始化方面,我认为__init__()在这个问题中将Java的构造函数与Python进行比较是安全的.

我猜是因为Python我可以灵活地决定何时调用(在这种情况下初始化我当前的类'数据属性之后)我的祖先__init__()与Java相比super()需要成为构造函数调用中的第一个语句,我可能是安全的从中调用重写方法__init__()

如果我在猜测上述内容时是正确的,那么作为一名祖先类设计师,我不会受到我的子类设计师的左右的影响吗?如果子类设计者__init__()在初始化他的数据属性之前调用了我的数据属性,这些属性将由他的一个被覆盖的方法使用,并且我调用该方法,则会导致程序失败!

S.L*_*ott 6

我可以安全地调用重写方法__init__()吗?

你是.该self结合已经发生之前__init__()进行评估.

祖先类设计师受我的子类设计师左右的左右?

这是普遍真实的,与__init__()其他任何事情无关.

子类开发人员可以做任何事情.此外,这是Python:他们有你的源,也可以修改它.

如果子类设计者__init__()在初始化他的数据属性之前调用了我的数据属性,这些属性将由他的一个被覆盖的方法使用,并且我调用该方法,则会导致程序失败!

正确.这种情况的发生方式是子类设计者选择了一个你已经使用过的名称.他们保证,通过选择名称,该计划将失败.