# -*- coding: utf-8 -*-

class People(object):

def __init__(self, name, age):

self.name = name
self.age = age
# 私有属性
self.__number = 0

# 这俩函数的作用,就是在为了在类声明的外部,可以访问到私有属性
# 专门定义函数获取私有属性值
# def num(self):
# # 返回私有属性值
# return self.__number
#
# # 专门定义函数设置私有属性值
# # qwer是一个函数名 随便取
# def qwer(self,value):
# # 给对象的属性赋值
# self.__number = value
# # 专门定义函数删除私有属性
# def delete_attr(self):
# # 删除属性
# del self.__number

# 获取私有属性值 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


# @property
# def work(self): # 当rs = 对象.work 会执行这个函数
# print('执行了@property装饰的work函数')
#
# @work.setter # 当对象.work = 值 会执行这个函数
# def work(self, value):
# print('执行了@work.setter装饰的work函数')
#
# @work.deleter # 当 del 对象.work 会执行这个函数
# def work(self):
# print('执行了@work.deleter装饰的work函数')

p1 = People('张三', 22)
# 执行@property装饰的函数
# p1.work
# 执行@work.setter装饰的函数
# p1.work = 2000
# 执行@work.deleter装饰的函数
# del p1.work

# 在类声明的外部,无法直接访问私有属性
# number = p1.num()
# print(number)
# 在类声明的外部,无法直接访问私有属性
# p1.__number = 1000
# p1.qwer(1000)
# number = p1.num()
# print(number)
# 在类声明的外部,无法直接访问私有属性
# del p1.__number
# p1.delete_attr()


# 正常的对象属性赋值
# 对象.属性名 = 属性值
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)