You need to enable JavaScript to run this app. Python类私有属性如何编写getter、setter方法?@property不生效如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Python类私有属性如何编写getter、setter方法?@property不生效如何解决

运行环境
  • 操作系统:Windows 10 64位
  • 编辑器:VSCode 1.56.2
  • Python版本:3.9.0
问题原因

你在构造方法__init__中直接对私有属性self.__year赋值,该操作不会触发@year.setter装饰的校验逻辑,传入的参数5直接被赋值给了__year,因此最终打印结果为5,不符合预期。

Python的@property装饰器绑定的校验规则仅在对实例的公开属性year赋值时生效,直接操作双下划线开头的私有属性会绕开所有校验逻辑。

修复方案

将__init__中的赋值逻辑修改为对公开属性year赋值,触发校验规则即可:

class Ab():
    def __init__(self, year):
        self.year = year
        print(self.__year)

    @property
    def year(self):
        return self.__year

    @year.setter
    def year(self, y):
        if y < 8:
            self.__year = 0
        else:
            self.__year = y


a = Ab(5)

修改后运行代码输出为0,符合预期。

扩展说明

如果后续有多处需要对year赋值的场景,也可以将校验逻辑单独抽为私有方法,构造方法和setter统一调用该方法,避免逻辑重复,降低维护成本。

内容的提问来源于stack exchange,提问作者z.ghane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 04:27:00