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

为什么这段Python代码中多个Shape实例的pos属性引用同一CPoint对象

问题原因

Python的函数默认参数仅在函数定义阶段被求值一次,而非每次调用函数时重新计算。
你在定义Shape.__init__时就执行了CPoint()创建了一个点位实例,后续所有没有显式传入pos参数创建的Shape对象,都会共用这个提前创建好的CPoint实例。因此修改任意一个未传pos的Shape的位置时,其他同批次创建的实例的位置也会同步变化,才会出现你看到的结果偏差。

解决方法

将pos的默认值改为None,在__init__内部判断如果没有传入pos参数,再创建新的CPoint实例,保证每个实例的点位都是独立的:

class Shape:
    def __init__(self, color = "yellow", filled = True, pos = None): 
        self.__color = color
        self.__filled = filled
        # 仅在未传入pos时新建CPoint实例,每次调用都会生成独立对象
        self.__pos = pos if pos is not None else CPoint()
    
    # 其余方法保持不变即可

修改后运行代码,输出就会和预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 15:45:03