为什么我在Python代码中没有看到以下内容?
class A:
def __init__(self, ...):
# something important
class B(A):
__init__ = A.__init__
它似乎可以在我的盒子上使用Python 2.5,2.6,2.7和PyPy 1.8。
我看到以下内容,而不是:
class B(A):
def __init__(self, *args, **kwargs):
A.__init__(self, *args, **kwargs)
或使用super
的内容。
我更喜欢我的第一个例子(明确比隐含更好!)但我担心它不是出于某种原因而是犹太人。它有什么不对或有什么不对吗?
编辑:是的,我的意思是A.__init__
,而不是self.__init__
答案 0 :(得分:10)
当然,它会起作用(假设你做对了,这不在你的例子中),但是没有理由去做。如果您希望B
致电A
的{{1}},请不要在__init__()
上定义__init__()
,这将自动发生。毕竟,这就是继承的重点。
您希望为B
撰写__init__()
的唯一原因是,除了B实例时,您还想做些什么>如何初始化B
实例。在这种情况下,除了调用A
之外,你还要编写其他代码,因此一个简单的赋值也不适合那里。
如果您想保护A.__init__()
的{{1}}不被猴子补丁更改为B
,我想您可以使用此功能。但这似乎是一个边缘案例。更糟糕的是,这是出乎意料的行为,并公然否认Python的动态性。