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

Python类初始化方法字典默认值设置遇NameError问题求助

解决NameError与Python类默认参数的陷阱

首先看你触发的NameError——问题非常直接:你在默认字典里写的black、white、red没有被定义成变量,Python会把它们当作标识符去查找,但你其实是想把它们作为字符串键来用,所以必须给这些键加上引号。

另外还有一个容易踩的Python坑:不要用可变对象(比如字典、列表)作为函数/方法的默认参数。因为默认参数是在函数定义时创建的,而不是每次调用时生成,后续如果修改了self.colors_dict,会意外改变这个默认字典,影响后续的实例化操作。

修正后的代码如下:

class PaintWindow:
    def __init__(self, display_height, display_width, colors_dict=None):
        # 处理默认参数,避开可变对象的陷阱
        if colors_dict is None:
            colors_dict = {
                'black': (0, 0, 0),
                'white': (255, 255, 255),
                'red': (255, 0, 0)
            }
        self.display_height = display_height  # 原代码写死了800,这里改成用传入的参数,如果你确实要固定尺寸可以改回去
        self.display_width = display_width    # 同理,原代码写死了600,建议匹配传入值
        self.colors_dict = colors_dict

额外说明:

  • 给字典键加上引号后,Python就会把它们当作字符串处理,不会再去查找对应的变量,NameError就解决了。
  • 将默认参数设为None,再在方法内部创建默认字典,这样每次实例化时如果没传colors_dict,都会生成一个全新的字典,彻底避免了可变默认参数的副作用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:25:09