"""
封装行为
需求:如何保证数据的有效性
property 属性
价值:保护实例变量
1. 属性名与实例变量名称相同(拦截)
2. 属性中操作私有变量(需要被保护)
核心:拦截
"""classPerson(object):def__init__(self, name, hp, age):
self.name = name
self.hp = hp
self.age = age
@propertydefhp(self):return self.__hp # 被保护数据
@hp.setter
defhp(self, value):if0<= value <=100:
self.__hp = value
else:raise Exception("血量不对")# age = property(读取函数)# (1) 创建属性对象property()# (2) 将下面的函数作为参数property(读取函数)# (3) 将属性对象交给变量名关联age
@property# 保护数据,保护实例变量defage(self):return self.__age
# age.setter(设置函数)# (1) 调用属性的setter函数# (2) 将下面的函数作为参数setter(设置函数)
@age.setter
defage(self, value):if value >60:
self.__age =60elif value <0:
self.__age =0
self.__age = value
p1 = Person("小明",20,80)print(p1.name)print(p1.hp)print(p1.age)
方法2:私有可读不可改
快捷键直接输入prop+回车即可自动出现下方代码
classPerson(object):def__init__(self, name, hp, age):
self.name = name
self.__hp = hp
@propertydefhp(self):return self.__hp
方法3:私有可改不可读
快捷键直接输入prop+回车即可自动出现下方代码
classPerson(object):def__init__(self, name, hp):
self.name = name
self.hp = hp
hp =property()
@hp.setter
defhp(self, value):
self.__hp = value
p1 = Person("小红",20)print(p1.__dict__)