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

Python中@property实现的Getter/Setter未生效问题咨询

问题原因及解决方法

问题出在类成员的定义顺序上!你把__init__方法写在了@property和@x.setter的前面,这直接导致了逻辑失效:

当__init__执行self.x = x时,类的x属性还没被定义成带setter的property,此时self.x = x只是给实例直接创建了一个普通的实例属性x,完全没触发你后面写的数值验证逻辑。

而后续访问或赋值p1.x时,Python会优先使用实例本身的x属性,而非你后来定义的类级property。这就是为什么输入1001得到1001、输入-12得到-12——你的验证逻辑根本没被执行。


修复方法

把@property和@x.setter的定义挪到__init__前面即可:

class P:
    @property
    def x(self):
        return self.__x
    @x.setter
    def x(self, x):
        if x < 0:
            self.__x = 0
        elif x > 1000:
            self.__x = 1000
        else:
            self.__x = x
    def __init__(self,x):
        self.x = x

现在再执行你的测试代码:

p1 = P(1001)
print(p1.x)  # 输出 1000
p1.x = -12
print(p1.x)  # 输出 0

就能得到符合预期的结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:51:53