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
相关产品推荐
相关产品推荐

