您的位置:首页 > 运维架构

@property、私有属性

2018-02-03 11:49 197 查看
# -*- 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: