码迷,mamicode.com
首页 > 编程语言 > 详细

python学习之-propetry装饰器

时间:2018-12-16 10:59:44      阅读:351      评论:0      收藏:0      [点我收藏+]

标签:数据   not   val   let   nbsp   turn   try   style   必须   

propetry是一个内置函数,用来将一个功能伪装成一个数据属性

property将一个方法伪装成一个数据属性
class People:
def __init__(self,name,height,weight):
self.name=name
self.height=height
self.weight=weight

@property
def bmi(self):
return self.weight / (self.height ** 2)

obj=People(‘egon‘,1.8,70)
obj.height=1.81
obj.weight=69
# print(obj.bmi()) #没有伪装前是这样调用的
print(obj.bmi) #伪装后是这样调用的

 

例:将一个接口伪装成数据属性

class People:
def __init__(self,name):
self.__name=name

@property
def name(self):
return self.__name

print(name) #将一个接口伪装成一个数据属性让用户调用

 

例:查看、修改和删除接口

class People:
def __init__(self,name):
self.__name=name

@property
def name(self): #这个功能函数是被property装饰过的
return self.__name

@name.setter #这里就可以以被装饰函数为起始名写一个setter修改接口
def name(self,val):
if type(val) is not str:
print(‘名字必须是str类型‘)
return
self.__name=val

@name.deleter #这里就可以以被装饰函数为起始名写一个deletery删除接口
def name(self):
print(‘不让删除‘)

obj=People(‘egon‘)

print(obj.name)
obj.name=‘EGON‘ #调用了修改接口,修改了name的值
print(obj.name)

del obj.name #调用删除接口
print(obj.name)

PS:但凡被propetry装饰的函数,后面都可以以函数名为起始调用(@name.setter 修改/ @name.deleter 删除)

PS:setter对应的就是修改属性,deleter对应的就是删除操作,propetry对应的就是查看操作

 

旧的写法

class People:
def __init__(self,name):
self.__name=name

def get_name(self):#这里函数名没有限制,但是一般都是标识性的名字
return self.__name

def set_name(self,val):
if type(val) is not str:
print(‘名字必须是str类型‘)
return
self.__name=val

def del_name(self):
print(‘不让删除‘)

name=property(get_name,set_name,del_name) #这里括号里的必须是按照查看、修改、删除排序,必须按照顺序,而且返回值不能乱赋值,必须赋值给对应的属性

obj=People(‘egon‘)

obj.name
obj.name=123
del obj.name

 

python学习之-propetry装饰器

标签:数据   not   val   let   nbsp   turn   try   style   必须   

原文地址:https://www.cnblogs.com/shizhengquan/p/10125730.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!