You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 15:25:44