(8)propetry装饰器
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
(8)propetry装饰器的更多相关文章
- 面向对象特征:封装、多态 以及 @propetry装饰器
(继承补充)组合 obj=fun()#对象 obj.attr=foo()#对象的属性等于另一个对象 什么是组合: A类的对象具备某一个属性,该属性的值是B类的对象 基于这种方式就把A类与B ...
- Python高手之路【四】python函数装饰器
def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...
- python装饰器
今天看了装饰器的一些内容,感觉@修饰符还是挺抽象的. 装饰器就是在不用改变函数实现的情况下,附加的实现一些功能,比如打印日志信息等.需要主意的是装饰器本质是一个高阶函数,她可以返回一个函数. 装饰器需 ...
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化
本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...
- [原创]django+ldap实现单点登录(装饰器和缓存)
前言 参考本系列之前的文章,我们已经搭建了ldap并且可以通过django来操作ldap了,剩下的就是下游系统的接入了,现在的应用场景,我是分了2个层次,第一层次是统一认证,保证各个系统通过ldap来 ...
- PHP 装饰器模式
装饰器模式:是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能. [装饰器模式中主要角色] 抽象组件角色(Component):定义一个对象接口,以规范准备接受附加责任的对象,即可以给这 ...
- python cookbook 学习系列(一) python中的装饰器
简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓 ...
- python基础补漏-05-生成器和装饰器
[1]生成器 很难用简单的语言描述生成器. 生成器:从字面上来理解,就是以某种规则为基础,不断的生成数据的工具 生成器函数: 在函数中如果出现了yield关键字,那么该函数就不再是普通函数,而是生成器 ...
- python --> 递归 以及装饰器
一.递归知识 函数迭套执行,逐层执行之后,满足某个条件之后就会停止执行,将return值返回上层的函数,上层函数再逐层返回,最终返回给最初始函数. 递归在斐波那契数列的应用[斐波那契数列特点:前两个数 ...
随机推荐
- javascript之构造函数的继承(引用网络)
这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个" ...
- Confluence 6 嵌套用户组的备注
潜在的性能影响.启用嵌套用户组可能会减慢用户查找的速度. 在 LDAP 中定义嵌套用户组.在 LDAP 中,一个嵌套用户组是 DN (Distinguished Name)的子用户组,这个字用户组将会 ...
- python中的注意事项
.python 中的 and 从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值: or 也是从左到有计算表达式,返回第一个为真的值: 其中数字 0 是假,其他都是真: 字 ...
- 怎么使用response.write来做一个javascript的alert弹出窗口
Page.RegisterStartupScript("alert", "<script language=javascript>alert('添加成功'); ...
- Asp.Net 高性能ORM框架——SqlSugar
公司团队项目.产品已经完全抛弃EF,SqlSugar定位不是ORM,而是为了方便的让你去写Sql. SqlSugar 媲美原生ADO.NET的性能,语法简洁,并且支持 Json .Dynamic. L ...
- textBaseline
<!DOCTYPE html><html><body> <canvas id="myCanvas" width="400&quo ...
- Spring Cloud Edgware之后版本 Zipkin+Kafka整合
zipkin服务器端 1.依赖 <!-- zipkin server --> <dependency> <groupId>io.zipkin.java</gr ...
- consumer的DubboClientHandler线程池
1. 创建线程池 创建线程池的调用栈如下: SimpleDataStore把线程池存放在map中. public class NettyClient extends AbstractClient { ...
- maven相关资源
http://mvnrepository.com/search?q= http://maven.aliyun.com/nexus/#welcome https://www.w3cschool.cn/m ...
- skill prefix neo,non input 1
1● neo 新的 2● non 不,非,无