我们在很多需求场景中都能遇到数据只读需求,这样的数据在类中一般被命名为只读属性,其实只读属性就是通过私有化属性间接的实现的,下面我们来演示一下。
一些在类的内部根据不同情况进行修改,但是对于外界来说不能做任何变动的属性叫做只读属性。只读属性一般是相对于实例化的对象而言,对象不能修改只读属性。
实现方法1:先私有化属性,然后通过方法公开读功能。
class Person:
def __init__(self):
self.name = 'Tom'
self.__money = 100 # 先私有化属性
def getMoney(self): # 然后通过方法公开读功能
return self.__money
p = Person()
print(p.getMoney()) # 通过方法调用读取属性
实现方法2:先私有化属性,然后通过装饰器来实现只读
class Person:
def __init__(self):
self.name = 'Tom'
self.__money = 100 # 先私有化属性
@property # 通过装饰器property来实现只读,作用是把方法当做属性来使用
def getMoney(self):
return self.__money
p = Person()
print(p.getMoney) # 把方法当做属性使用,直接读取
# p.getMoney = 99 # 这里是只读,无法修改
只读属性是为了数据安全,属性是一个名称,不建议大家把函数设置为属性名,因为属性和修改函数使用场景不同,最好不要暴露在外,比如取款机系统,用户看到存款余额是使用getMoney方法,当取款或者存款时,余额会发生变化,在内部调用setMoney方法.