# @property 负责装饰对象函数,让其生成对应的setter和getter 函数
# 调用的时候,直接可以使用对象名.函数名,调用
'''
判断输入参数是不是想要的类型
普通的修改、添加属性已经不能满足
创建类变量来判断,
@property
'''
class People(object):
def __init__(self,name,age):
# 目的,执行age.setter函数,给_age属性赋值age
self.age = age
self.name = name
@property
#@property 会将age函数声明为一个getter 函数,getter函数,一般用来获得数据得操作
#获取数据
def age(self):
return self._age
# 修改属性值
# 修改属性值: 对象.函数名 = 参数值,来设置某些数据
@age.setter
def age(self,value):
if not isinstance(value,int):
raise TypeError('value must be a int!')
self._age = value
if self._age < 18:
self.is_ok = True
print('未成年')
else:
self.is_ok = False
print('成年人')
@age.deleter
#@age.deleter 装饰器相当于给age 函数绑定一个删除属性的功能
def age(self):
if hasattr(self,'_age'):
#检查是否拥有这属性
del self._age
else:
print('没有该属性')
p1 = People('张三',34)
print(p1.name)
# 通过调用@property,函数获取属性值,也可以是私有属性
print(p1.age)
p1.age = 68
# 利用@age.setter类函数,判断添加的时候参数类型
print(p1.age)
del p1.age
del p1.age