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

Python中创建getter和setter后的属性访问调用逻辑是怎样的?

问题1

__init__方法中执行self.hour = hour这类赋值操作时,会自动调用对应的hour setter方法,初始化参数也会直接传入该方法。你可以自行测试:如果调用Time(25, 0, 0)初始化,会直接抛出ValueError,就是因为setter的校验逻辑被触发执行了。

问题2

在类定义的其他位置访问self.hour时,也会自动触发对应的hour getter方法。不仅是类内部,类外部访问实例的hour属性(比如wake_up.hour),同样会调用getter返回结果。

问题3

使用带下划线前缀的变量名存储属性值只是通用编码约定,不是语法强制要求。
你需要遵守的唯一规则是:底层存储的变量名不能和@property装饰的属性名重名,否则会触发递归调用导致死循环。Python社区约定单下划线前缀代表类内部使用的「私有」属性,看到_hour开发者就能直接判断这是hour属性对应的底层存储变量,不需要外部访问,能大幅提升代码可读性,因此被广泛使用。


内容的提问来源于stack exchange,提问作者Chandan Kumar Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:18:02