8.1.3 访问限制
2025年09月21日
8.1.3 访问限制
在开发过程中,经常会遇到不希望对象的某些属性被外界随意访问和修改的情况。这时需要限制外界对属性的操作在我们的控制范围之内,一般的处理方式是:将属性定义为私有属性,再添加一个公有方法,用于属性的操作。
私有属性和私有方法的定义方法是在变量名称前加上双下划线,如__age()。
调用时可通过对象名._类名__私有属性名,或者类名._类名__私有属性名进行访问。
例如,在冰箱的制造中,核心技术都要保密,可以将核心技术涉及的属性设为私有属性,再定义一个公有方法来访问,如设置冰箱制冷的温度为私有属性,代码如下:
运行结果如下:
在上述代码中,定义了get_temperature()方法,用于获取对象私有属性__temperature的值,由于在方法中访问私有属性,故而设置了一定的条件进行判断(也可以不设),检测是否有权限进行访问控制。又定义了set_temperature()方法,用于设置私有属性的值,在该方法中对传入的参数进行判断,只有在规定的温度范围内才被视为有温度设置,这样可以确保对象数据属性的合理性。
除了这种通过公有方法来访问和设置私有属性的方法,Python还提供了另一种既能检查参数,又能像直接访问公有属性那样的便捷方式,即使用@property装饰器。
@property装饰器可以把方法变成属性调用。把一个get()方法变成属性,只需要为它加上@property装饰器即可,还可以创建另一个装饰器@XXX.setter,把set()方法变成属性的赋值方法。将上面的代码进行修改,如下: