描述符

概念

描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议。

__get__():调用一个属性时,触发
__set__():为一个属性赋值时,触发
__delete__():采用del删除属性时,触发

用途

描述符的作用是用来代理另外一个类的属性的(必须把描述符定义成这个类的类属性,不能定义到构造函数中)
例:
包含这三种方法的新式类成为描述符,有这个方法产生的实例进行属性的调用/删除/赋值,并不会触发这三种方法

class Foo():
    def __get__(self):
        print('触发get')
    def __set__(self):
        print('触发set')
    def __deletel__(self):
        print('触发delete')
f1=Foo()
f1.name='alex'
f1.name

结果:
‘alex’
什么时候会触发:
首先有一个描述符,然后有一个被描述的类,定义成被描述类的类属性。即除描述符外的类的类属性,该类属性的值是描述符类的一个对象。

class Foo():
    def __get__(self,inatance,owner):
        print('触发get')
    def __set__(self,inatance,owner):
        print('触发set')
    def __deletel__(self,inatance,owner):
        print('触发delete')
class Bar():
    name=Foo()
    def __init__(self,name):
        self.name=name
b1=Bar('alex')
b1.name

结果:
触发set
触发get

描述符分类

1、数据描述符:至少实现了__get__(),__set__()
2、非数据描述符:没有实现__set__()

注意事项

要严格遵循优先级,优先级由高到低分别为:
1、类属性
2、数据描述符
3、实例属性
4、非数据描述符
5、找不到的属性触发__getattr__()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值