Python类中定义多个__init__方法会怎样?是否会发生覆盖?
Python类中多个__init__方法的行为解析
1. 多个__init__方法的结果
在Python的同一个类中定义多个__init__方法时,只有最后定义的那个__init__方法会生效,之前定义的所有__init__都会被覆盖。
拿你给出的代码举例:
class D: def __init__(self, x): print(f'Constructor 1 with argument {x}') # 这个会覆盖上面的__init__方法吗?——是的,但之后又被下一个覆盖 def __init__(self, x, y): print(f'Constructor 1 with arguments {x}, {y}') # 这个会覆盖上面的__init__方法吗?——是的,最终只有这个生效 def __init__(self): pass
当你实例化类D时,只能调用无参的__init__:
d = D() # 正常执行,不会报错 d = D(1) # 报错:TypeError: D.__init__() takes 1 positional argument but 2 were given d = D(1,2) # 报错:TypeError: D.__init__() takes 1 positional argument but 3 were given
2. 什么是“覆盖”?
用大白话解释:覆盖就好比你在书桌的同一个位置放了好几本同名的笔记本,先放的被后放的压在下面,你最后能拿到、能使用的只有最上面那本。
放到Python类的方法里就是:当你定义了多个同名方法时,后面的方法会把前面的方法“替换掉”,类只会保留最后定义的那个同名方法。当你调用这个方法名时,只会执行最后定义的那个版本,之前的版本相当于被“藏起来”再也用不到了。
内容的提问来源于stack exchange,提问作者Ali Murtaza
相关产品推荐
相关产品推荐

