如何解决为什么不自动调用超类 __init__ 方法??
__init__
Python和其他语言的 之间的关键区别在于它__init__
不是 函数:它是一个
(实际的 (如果有的话,但是,请参见后面;-)是__new__
并且工作方式完全不同)。在
所有超类时(毫无疑问,在“继续向下构造之前”这样做)显然是说你正在 一个子类的实例的一部分,这显然不是
,因为有许多用例需要跳过、更改、控制超类的初始化——如果有的话,发生在子类初始化的“中间”,等等。
基本上,初始化程序的超类委派在 Python 中不是自动的,原因完全相同,这样的委派对于
其他方法也不是自动的——请注意,那些“其他语言”不会对任何其他方法进行自动超类委派其他方法…… 仅
用于构造函数(如果适用,析构函数),正如我所提到的,这 Python
的__init__
。(的行为__new__
也很奇特,虽然实际上与您的问题没有直接关系,因为__new__
它是一个如此奇特的构造函数,它实际上并不一定需要构造任何东西——可以很好地返回一个现有的实例,甚至是一个非实例…
显然 Python 为您提供了 比您想到的“其他语言”更多地控制机制,其中 还 包括本身没有自动委派__new__
!-)。
解决方法
为什么 Python
设计者决定子类的__init__()
方法不会__init__()
像在其他一些语言中那样自动调用其超类的方法?Pythonic和推荐的成语真的像下面这样吗?
class Superclass(object):
def __init__(self):
print 'Do something'
class Subclass(Superclass):
def __init__(self):
super(Subclass,self).__init__()
print 'Do something else'
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。