Vai*_*pai 10 python inheritance constructor
这是这个问题的后续行动:
有效的Java第2版,第17项:继承的设计和文档,或者禁止它:
为了允许继承,类必须遵守一些限制.构造函数不得直接或间接调用可覆盖的方法.如果违反此规则,将导致程序失败.父类的构造子类构造函数之前运行,所以子类构造函数运行之前在子类中重写方法将被调用.如果重写方法依赖于子类构造函数执行的任何初始化,则该方法将不会按预期运行.
由于我们只是要触及Java构造函数的初始化方面,我认为__init__()
在这个问题中将Java的构造函数与Python进行比较是安全的.
我猜是因为Python
我可以灵活地决定何时调用(在这种情况下初始化我当前的类'数据属性之后)我的祖先__init__()
与Java相比super()
需要成为构造函数调用中的第一个语句,我可能是安全的从中调用重写方法__init__()
?
如果我在猜测上述内容时是正确的,那么作为一名祖先类设计师,我不会受到我的子类设计师的左右的影响吗?如果子类设计者__init__()
在初始化他的数据属性之前调用了我的数据属性,这些属性将由他的一个被覆盖的方法使用,并且我调用该方法,则会导致程序失败!
我可以安全地调用重写方法
__init__()
吗?
你是.该self
结合已经发生之前__init__()
进行评估.
祖先类设计师受我的子类设计师左右的左右?
这是普遍真实的,与__init__()
其他任何事情无关.
子类开发人员可以做任何事情.此外,这是Python:他们有你的源,也可以修改它.
如果子类设计者
__init__()
在初始化他的数据属性之前调用了我的数据属性,这些属性将由他的一个被覆盖的方法使用,并且我调用该方法,则会导致程序失败!
正确.这种情况的发生方式是子类设计者选择了一个你已经使用过的名称.他们保证,通过选择名称,该计划将失败.