(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值返回上层的函数,上层函数再逐层返回,最终返回给最初始函数. 递归在斐波那契数列的应用[斐波那契数列特点:前两个数 ...
随机推荐
- Codeforces 496C - Removing Columns
496C - Removing Columns 思路:暴力,用vis标记数组实时记录一下之前的行i+1和上一行i否全相等,false表示全相等. 代码: #include<bits/stdc++ ...
- ViewPager 如何得到当前的Fragment (使用FragmentPagerAdapter)
使用FragmentPagerAdapter时,难免要在MainActivity 和 当前显示的Fragment间传递数据.但是FragmentPagerAdapter并没有给我们提供类似getCur ...
- hdu 6395 Sequence (简单矩乘)
P/n大多数情况是不变的, 取值只有$O(\sqrt{P})$种, 可以用$p/(p/i)$跳过重复的值, 复杂度$O(logn\sqrt{P})$ 要注意 P跟模数P有冲突 要特判p/i==0和p/ ...
- 『cs231n』线性分类器损失函数
代码部分 SVM损失函数 & SoftMax损失函数: 注意一下softmax损失的用法: SVM损失函数: import numpy as np def L_i(x, y, W): ''' ...
- 10. Regular Expression Matching *HARD*
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- 深入理解angularjs $watch ,$apply 和 $digest --- 理解数据绑定过程
转自:http://www.angularjs.cn/A0a6 Angular用户都想知道数据绑定是怎么实现的.你可能会看到各种各样的词汇:$watch,$apply,$digest,dirty-ch ...
- dup的使用(二)
转自:http://blog.csdn.net/yeyuangen/article/details/6852682 一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运 ...
- 纯js倒计时效果(交流加群:452892873)(本群每天都更新学习资料)
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- c++多态多实例
#include <bits/stdc++.h> using namespace std; class A { public: A() { cout << "构造A& ...
- 什么是 SSO 与 CAS?
SSO SSO 是英文 Single Sign On 的缩写,翻译过来就是单点登录.顾名思义,它把两个及以上个产品中的用户登录逻辑抽离出来,达到只输入一次用户名密码,就能同时登录多个产品的效果. 打个 ...