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

Python OOP中函数作为默认参数的两种写法优劣及可行性分析

结论

第一种写法是更符合预期的实现,第二种写法存在逻辑缺陷,不推荐使用。

核心原因:Python默认参数的求值规则

Python中所有函数(包括类的实例方法、类方法、静态方法)的默认参数,只会在函数被定义加载的阶段执行1次,不会在每次调用函数时重新求值:

  • 第二种写法里的get_random_string()只会在类定义、方法加载时执行一次,后续所有不传literature_title的调用,都会复用第一次生成的固定字符串,完全达不到“每次调用未传参就生成新随机标题”的需求。
  • 第一种写法将默认值设为None,把get_random_string()的执行放到了方法内部,每次调用方法时如果检测到没有传入自定义标题,才会执行生成函数,完全符合预期的逻辑。

你可以做个简单测试:连续两次调用第二种写法的nono()方法不传参数,打印两次返回的title值,会发现两次结果完全相同,而调用第一种写法的nonono()方法两次,返回的title是不同的随机值。

关于“能否将函数作为类方法默认参数”的疑问

这个规则和是否是OOP场景没有关系,是Python语言层面的通用设计,是否可以用要看你的业务需求:

  • 如果你本身就需要默认值是固定的、仅在方法定义时生成一次的结果,那可以这么写,但这种场景非常少见。
  • 绝大多数需要动态生成默认值的场景,都应该用第一种“默认值设为None+内部判断生成”的实现方式。

内容的提问来源于stack exchange,提问作者LIL-Raps

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:24:03