class People(object):
def __init__(self, name, age):
self.name = name
self.age = age
# 私有属性
self.__number = 0
# 获取私有属性值 number = p1.number 会执行这个函数
@property
def number(self):
# 返回私有属性值
return self.__number
# 设置私有属性值 p1.number = 666
@number.setter
def number(self, value):
# 设置__number的值
self.__number = value
# 删除私有属性 del p1.number 会执行这个函数
@number.deleter
def number(self):
# 删除属性
del self.__number
p1 = People('张三', 22)
# 正常的对象属性赋值
# 对象.属性名 = 属性值
p1.name = '李四'
# 获取对象的属性值
name = p1.name
# 删除对象的属性
del p1.name
# 私有属性升级版
# 会去执行@property装饰number函数,函数执行完成后返回一个结果
num = p1.number
print(num)
# 会去执行@number.setter装饰的number函数,在函数中设置__number属性的值
p1.number = 666
# 会去执行@property装饰number函数,函数执行完成后返回一个结果
print(p1.number)
# 会去执行@number.deleter装饰的number函数,在函数中会将__number属性删除
del p1.number
# 会去执行@property装饰number函数,函数执行完成后返回一个结果
print(p1.number)
小例子:
class People(object):
'''
给name属性赋值,值必须是字符串,否则抛出异常
给age属性赋值,值必须是整数,否则抛出异常
'''
def __init__(self,name,age):
#执行@name.setter装饰的name函数,在函数中给_name属性赋值
self.name = name
self.age = age
#获取name的属性值
@property
def name(self):
#返回属性值时,也可以添加一些额外的功能
a = self._name
#把姓氏换成*
a = a.replace(a[0],'*')
#返回name属性值
return a
#设置name属性的值
@name.setter
def name(self,value):
#在赋值之前添加判断
if not isinstance(value,str):
# 抛出异常
raise TypeError('People object.name,name must be a str!')
#设置name的属性值
self._name = value
#还可以继续添加其他功能
# 删除name属性
@name.deleter
def name(self):
#添加一些额外的功能
if not hasattr(self,'_name'):
raise AttributeError('People object has no attribute "_name"')
#删除_name属性
del self._name
#获取age属性的值
@property
def age(self):
if self._age >=100:
print('老妖精')
elif 50<self._age<100:
print('老年人')
elif 18<self._age<=50:
print('成年人')
else:
print('小屁孩')
return self._age
@age.setter
def age(self,value):
if not isinstance(value,int):
# 抛出异常
raise TypeError('People object.age,age must be a int value!!!!')
self._age = value
@age.deleter
def age(self):
if not hasattr(self,'_age'):
raise AttributeError('People object has no attribute "_age"!!!')
del self._age
p1 = People('张三',23)
# name的属性值 必须是一个字符串。否则抛出异常
p1.name = '小星星'
print(type(p1.name))
print(p1.name)
# 删除对象的属性
del p1.name
p1.age = 18
print(p1.age)
del p1.age