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

仅导入Python模块时类中代码被执行是否符合预期?有无相关文档?

问题解答

现象是否符合预期?

完全符合预期,核心原因是Python对函数默认参数的求值时机规则:

  • Python中,函数(包括类的构造方法__init__)的默认参数值是在函数定义阶段计算的,而非调用阶段。
  • 在a_module.py定义class B时,其__init__方法的默认参数p:str = A().parameter会被立即执行:实例化A类,触发A的__init__方法,因此打印出class A is executed。
  • class C的__init__方法内的c = A().parameter属于方法内部逻辑,只有当C被实例化(即调用C())时才会执行,模块导入阶段不会触发。
  • class A的定义本身不会执行其__init__,只有实例化操作才会触发,这里是B的默认参数定义触发了A的实例化。

官方文档是否提及该行为?

Python官方文档明确记载了这一行为:函数的默认参数会在函数定义时被求值,且仅求值一次。这个规则不仅适用于可变对象(比如列表、字典)引发的常见陷阱,也适用于本例中通过实例化类来获取默认值的场景,本质都是同一求值时机规则的体现。

内容的提问来源于stack exchange,提问作者Kevin Zou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:22:36