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

构造函数新增可选参数from_strings是否需设置默认值?

Python构造函数可选参数的正确写法分析

先直接给结论:你给出的两种写法都存在问题,需要调整成更安全合理的写法才能满足需求。

  • 第一种写法def __init__(self, size=19, from_strings):语法错误
    Python明确规定,带默认值的参数必须放在无默认值参数的后面,否则解释器会直接抛出语法错误。这里size有默认值,from_strings没有,顺序不符合规则,根本无法运行。

  • 第二种写法def __init__(self, size=19, from_strings=[]):语法合法但隐藏陷阱
    Python的默认参数是在函数定义时就完成初始化的,用列表这类可变对象作为默认值,会导致所有Board实例共享同一个列表。如果某个实例修改了from_strings,其他实例的该参数也会跟着变化,这显然是不符合预期的。

正确实现方式

要支持b = Board(3, ["O.O", ".@.", "@O."])这类调用,同时规避上述问题,应该把默认值设为None,再在函数内部初始化空列表:

class Board:
    def __init__(self, size=19, from_strings=None):
        # 未传入from_strings时,初始化独立的空列表
        if from_strings is None:
            from_strings = []
        # 后续业务逻辑,比如赋值实例属性
        self.size = size
        self.from_strings = from_strings

这种写法的优势:

  1. 语法合规,完全支持你需要的调用方式,传入的3会赋值给size,列表会赋值给from_strings。
  2. 每个实例的from_strings都是独立的,不会出现多个实例共享同一可变对象的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:45:30