python __set__ __get___python3面对像进阶——描述符(__get__,__set__,__delete__)
描述符只实用于大型框架
1、描述符是什么?
描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议
__get__():调用一个属性时,触发
__set__():为一个属性赋值时,触发
__delete__():采用del删除属性时,触发
描述符代码示例:class Foo: #在python3中Foo是新式类,它实现了三种方法,这个类就被称作一个描述符
def __get__(self, instance, owner):
pass
def __set__(self, instance, value):
pass
def __delete__(self, instance):
pass
2、描述符是干什么的?
描述符的作用是用来代理另外一个类的属性的(必须把描述符定义成这个类的类属性,不能定义到构造函数中)
2.1 描述符类产生的实例进行属性操作并不会触发三个方法的执行代码实例:class Foo:
def __get__(self, instance, owner):
print('触发get')
def __set__(self, instance, value):
print('触发set')
def __delete__(self, instance):
print('触发delete')
#包含这三个方法的新式类称为描述符,由这个类产生的实例进行属性的调用/赋值/删除,并不会触发这三个方法
f1=Foo()
f1.name='egon'
f1.name
del f1.name
2.2 描述符被使用代码实例:class Foo:
def __get__(self, instance, owner):
print('触发get')
def __set__(self, instance, value):
print('触发set')
# instance.__dict__['x'] = value # 传入值
def __delete__(self, instance):
print('触发delete')
class Bar:
x = Foo()
def __init__(self, n):
self.x = n
b1 = Bar(10) # 触发set
b1.x # 触发get
print(b1.__dict__) # 空值
print(Bar.__dict__) # 'x': <__main__.foo>,
del b1.x # 触发delete
3、描述符细分情况:
一 数据描述符:至少实现了__get__()和__set__()class Foo:
def __set__(self, instance, value):
print('set')
def __get__(self, instance, owner):
print('get')
二 非数据描述符:没有实现__set__()class Foo:
def __get__(self, instance, owner):
print('get')
4、描述符注意事项:
一 描述符本身应该定义成新式类,被代理的类也应该是新式类
二 必须把描述符定义成这个类的类属性,不能为定义到构造函数中
三 要严格遵循该优先级,优先级由高到底分别是:
1.类属性
2.数据描述符
3.实例属性
4.非数据描述符
5.找不到的属性触发__getattr__()
python __set__ __get___python3面对像进阶——描述符(__get__,__set__,__delete__)相关推荐
- python六十五:描述符(__get__, __set__, __delete__)
优先级: 1. 类属性 2. 数据描述符 3. 实例属性 4. 非数据描述符 5.找不到的属性触发__getattr()__
- Python 中的属性访问与描述符
在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言,点(. ...
- python特性描述_详解 Python 最优雅的特性之一 — 描述符
本篇选自 Python黑魔法指南 -> 第四章 -> 第2节. github仓库: https://github.com/iswbm/magic-python magic-python 目 ...
- Python 中如何解决 asyncio 文件描述符最大数量限制问题
文章目录 问题复现 问题分析 事件循环 EventLoop I/O 多路复用 select 的缺点 解决方法 1.更换事件循环选择器 2.限制并发量 3.修改最大文件描述符限制 Windows Lin ...
- python入门——P46魔法方法:描述符(Property的原理)
描述符 描述符就是将某种特殊类型的类的实例,指派给另一个类的属性. 特殊类型: __get_(self, instance, owner) 用于访问属性,返回属性的值 __set_(self, ins ...
- (五)通过Python的select监控多个描述符实现并发连接
概述 本文通过使用select改写之前的服务器程序通过监控多个套接字描述符来实现并发连接并加入了一些机制让程序更加健壮,不过我们所有的实验都是建立在单词发送数据不会超过1024字节,如果超过你需要做特 ...
- 32.Python面向对象(五)【描述符、运算符底层、装饰器:闭包-闭包参数-内置装饰器-类装饰器】
目录: 每篇前言: Python面向对象(五) 1.1 描述符 1.2 运算符底层调用的什么? 1.3 装饰器 第一部分--引入门 (1)首先.咱再看遍闭包是啥: (2)然后,咱稍微高级点,看看闭包参 ...
- Python之路(第二十七篇) 面向对象进阶:内置方法、描述符
一.__call__ 对象后面加括号,触发执行类下面的__call__方法. 创建对象时,对象 = 类名() :而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()( ...
- python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解
2019独角兽企业重金招聘Python工程师标准>>> 1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过 ...
最新文章
- ElasticSearch elasticsearch-servicewrapper 在linux上的安装部署全程记录
- 多目标优化算法_【实验室论文】基于多种群协同演化的约束多目标优化算法
- 电销机器人价格_供应商电话销售机器人服务为先
- ASP.NET中PostBack和ViewState
- golang ffmpeg 做网络直播
- 前端学习(3223):总结props
- python怎么分析数据结构_《利用Python进行数据分析》第五章-pandas的数据结构介绍...
- 关于Tokenizer与TokenFilter的区别
- 3Dcnn 降假阳性模型调试(三)
- 设置hash后导致的返回问题的解决方案
- gulp-rev-append md5版本号
- 使用winedt写论文遇到的一些小问题
- 成为嵌入式高手,少不了这100多个软硬件开源项目
- 如何关闭方正软件保护卡
- numpy.ones用法
- Vue中router-link路由跳转以及传参方式
- 用流量扫码总显示无法连接服务器,手机有流量但无法连接网络?手机数据网络不能访问互联网...
- 如何设置word为只读
- 阿里云服务(三)—对象存储OSS和块存储
- 什么是软文?什么是软文广告?