这篇文章主要介绍了通过实例解析python描述符原理作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
本质上看,描述符是一个类,只不过它定义了另一个类中属性的访问方式。换句话说,一个类可以将属性管理全权委托给描述符类。
描述符类基于以下三种特殊方法,换句话说,这三种方法组成了描述符协议:
- __set__(self, obj, type = None): 在设置属性时,将调用这一方法。
- __get__(self, obj, value): 在读取属性时将调用这一方法。
- __delete__(self, obj): 对属性调用del时将调用这一方法。
其中,实现了setter和getter方法的描述符被称为数据描述符,反之,如果只实现了getter方法,则称为非数据描述符。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#描述符类
class revealAccess:
def __init__( self , initval = None , name = 'var' ):
self .val = initval
self .name = name
def __get__( self , obj, objtype):
print ( "Retrieving" , self .name)
return self .val
def __set__( self , obj, val):
print ( "updating" , self .name)
self .val = val
class myClass:
x = revelAccess( 10 , 'var "x"' )
y = 5
m = myClass()
print (m.x)
m.x = 20
print (m.x)
print (m.y)<br>
|
1
2
3
4
5
6
|
Retrieving var "x"
10
updating var "x"
Retrieving var "x"
20
5
|
如果一个类的某个属性有数据描述符,那么每次查找这个属性时,都会调用描述符的__get__()方法,并返回它的值;同样,每次在对属性赋值时,也会调用__set__()方法。
当每次使用del类对象.属性(或者delattr(类对象,属性))语句时,都会调用该方法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/xiaobaizzz/p/12227340.html