Python__new__方法、定制属性访问、描述符与装饰器
- __new__方法的运行顺序
- 装饰器的概念的用法
- 三个内置装饰器
- 类中属性的访问过程
__new__方法
创建实例的方法
__new__方法是在类创建实例的时候自动调用的
实例是通过类里面的__new__方法创建出来的
先调用__new__方法创建实例,再调用 __init__方法初始化实例
__new__方法,后面括号里的cls代表的是类本身
必须有返回值 父类名.__new__(cls)
单例模式
创建多个实例的时候,每个实例所指向的内存地址不同
单例模式让多个实例引用的是同一个实例,是一个实例的不同名字,指向同一内存地址
定制属性访问
就是对类里的属性进行增删改查的操作
增
实例名.属性名=值
setattr(实例名, '属性名', 值) # 有这个属性就修改,没有就增加
实例名.__setattr__('属性名',值) # 有这个属性就修改,没有就增加
删
只能删除自己添加的属性
delattr(实例名, '属性名')
实例名.__delattr__('属性名')
del 实例名
改
setattr(实例名, '属性名', 值) # 有这个属性就修改,没有就增加
实例名.__setattr__('属性名',值) # 有这个属性就修改,没有就增加
查
hasattr(实例名, '属性名') 返回bool值
getattr(实例名, '属性名') 返回属性值,不存在则报错
实例名. __getattribute__('属性名') 返回属性值,不存在则报错
描述符
比较抽象的一个概念,了解即可
描述符协议:python描述符是一个“绑定行为”的对象属性,在描述符协议中,它可以通过方法重写属性的访问
这些方法有 __get__(), __set__(), 和__delete__()
如果这些方法中的任何一个被定义在一个对象中,这个对象就是一个描述符
装饰器
本质是函数,能够实现在不修改原来的函数的基础上添加功能
在闭包的前提下进行装饰
三个内置装饰器
@property # 就像和访问属性一样
@staticmethod # 静态方法,与class类断开连接
@classmethod # 类方法 cls代表类本身
类装饰器
类也可以做装饰器,但是需要定义 __call__ 方法
Python__new__方法、定制属性访问、描述符与装饰器的更多相关文章
- Python:高级主题之(属性取值和赋值过程、属性描述符、装饰器)
Python:高级主题之(属性取值和赋值过程.属性描述符.装饰器) 背景 学习了Javascript才知道原来属性的取值和赋值操作访问的“位置”可能不同.还有词法作用域这个东西,这也是我学习任何一门语 ...
- 潭州课堂25班:Ph201805201 第十二课 new方法,定制属性访问,描述符与装饰器 (课堂笔记)
1,new方法: 类每次实例化时都会创建一个新的对象, class Textcls: # cls 是指类本身, def __new__(cls, *args, **kwargs): # 在 __ini ...
- python基础学习之描述符和装饰器
描述符的了解: 描述符协议: python描述符是一个"绑定行为"的对象属性,在描述符协议中,它可以通过方法重写属性的访问.这些方法有: __get__, __set__, 和__ ...
- ES6新增对象方法的访问描述符:get(只读)、set(只写)
Es6新增对象方法的访问描述符:get(只读).set(只写),可以直接使用,一般用于数据监听,用途类似于vue.$watch. var obj = { a:1, get bar() { return ...
- Python笔记(4)类__属性与描述符
部分参考自:http://www.geekfan.net/7862/ 新式类与经典类 2和3不一样,3都是新式类. 新式类和经典类的区别: class A: #classic class " ...
- ie8 报错:意外地调用了方法或属性访问
在某场景中一句简单的js: $("#changeOption").text("增加"); 在 IE8 下面报错:'意外地调用了方法或属性访问' 改成:$(&qu ...
- 【python】闭包、@修饰符(装饰器)、
闭包:(返回函数的行为叫闭包??) #函数也是对象,所以可以被传递 def line_conf(a,b): def line(x): return a*x+b return line line1=li ...
- Python 函数修饰符(装饰器)的使用
Python 函数修饰符(装饰器)的使用 1. 修饰符的来源修饰符是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等. 修饰符是解决这类问题的绝佳设计, ...
- 如何正确地使用Python的属性和描述符
关于@property装饰器 在Python中我们使用@property装饰器来把对函数的调用伪装成对属性的访问. 那么为什么要这样做呢?因为@property让我们将自定义的代码同变量的访问/设定联 ...
随机推荐
- SDWebImage4.0之后加载gif不显示的解决方案
SDWebImage4.0之前 UIImageView *imgView = [UIImageView new]; imgView.contentMode = UIViewContentModeSca ...
- RESTFUL如何指导WEB API设计?
博主刚刚接触web开发的时候,写了一个接口 /get_article_info/1 获取id为1的这篇文章的内容,被前辈们看见了,前辈给我说我这个接口设计的不太好啊,不符合RESTFUL规范,当前辈们 ...
- 激活windows操作系统的命令行指令
1.开始菜单中搜索命令提示符,右键管理员运行 2.为了避免激活的失败,首先卸载已经过期的密钥 输入以下命令:slmgr.vbs /upk 回车确认之后会弹出提示“已成功卸载了产品密钥” 3.下一步是将 ...
- 文本处理工具awk
目录 gawk:模式扫描和处理语言 awk语言 awk工作原理 print awk变量 自定义变量 printf命令 awk操作符 awk的条件判断 awk的循环 awk的数组 awk的函数 awk调 ...
- python升级带来的yum异常(解决错误File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:)
解决错误File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: 错误: 原因: 这是因为yum采用python作为命令解 ...
- 算法复杂度O(logn)详解
一.O(logn)代码小证明 我们先来看下面一段代码: int cnt = 1; while (cnt < n) { cnt *= 2; //时间复杂度为O(1)的程序步骤序列 } 由于cnt每 ...
- webpack打包 The 'mode' option has not been set, webpack will fallback to
webpack 打包报错 The 'mode' option has not been set, webpack will fallback to 'production' for,Module no ...
- Octave中的一些常用操作
>> 5+6ans = 11>> 1~=2ans = 1 %1表示true,0表示false>> 1~=1 %1不等于1ans = 0>> a=2 ...
- 【转】【好文章】更愉快的写css
我在写CSS的时候经常会碰到些麻烦事儿: 1)看上去蛮简单的排版却写了很久 2)代码写的越来越散,总是这里补一句,那里补一句,没有条理性 3)margin.padding.font-size等属性在不 ...
- 给那些迷茫的人学习JAVA的一些建议?
前语:我用了3年的时间,一步一步走到了现在,半途也有了解过其他的技能,也想过要转其他的言语,可是最终仍是坚持下来走Java这条路,希望我的经历能够帮忙到后来的人,要是觉得对你有帮忙的话,能够注重一下和 ...