Python笔记(二十五)_魔法方法_描述符

2023-04-20,,

描述符的属性方法

__get__(self, instance, owner): 用于访问属性,返回属性的值

__set__(self, instance, value): 用于给属性赋值时,返回属性的值

__delete__(self, instance): 用于删除属性时,不返回任何内容

将某种特殊类型的类的实例指派给另一个类的属性(注意:是类属性,不是实例属性),而这种特殊类型的类是实现了__get__,__set__,__delete__这三个方法中的一个或多个,此时这个实例被称为描述符,而被指派属性的类叫做描述符类

描述符优点:保护属性不受修改、属性类型检查和自动更新某个依赖属性的值等。

>>>class Desc:      #Desc是包含了三种方法中任意个的特殊类型的类
  def __get__(self,instance,owner):
    print('getting',self,instance,owner)
  def __set__(self,instance,value):
    print('setting',self,instance,value)
  def __delete__(self,instance):
    print('deleting',self,instance)
>>>class MyDesc(): #MyDesc这个类叫描述符类
>>>x = Desc() #类对象被指派给其他类作为属性,此时Desc()就是一个描述符
>>>mydesc = MyDesc()
>>>mydesc.x
getting <__main__.Desc object at 0x0000024A437D8F98> <__main__.MyDesc object at 0x0000024A43857EB8> <class '__main__.MyDesc'>
>>>mydesc.x = 1
setting <__main__.Desc object at 0x0000024A437D8F98> <__main__.MyDesc object at 0x0000024A43857EB8> 1
>>>del mydesc.x
deleting <__main__.Desc object at 0x0000024A437D8F98> <__main__.MyDesc object at 0x0000024A43857EB8>

self: Desc object -> Desc的实例化对象,指的是x

instance: MyDesc -> MyDesc的实例化对象,指的是mydesc

owner: MyDesc -> 指的就是MyDesc类

>>>class MyDes:
  def __init__(self,values,attr):
    self.values = values
    self.attr = attr
  def __get__(self,instance,owner):
    print('正在获取变量:',self.attr)
    return self.values
  def __set__(self,instance,value):
    print('正在修改变量:',self.attr)
    self.values = value
  def __delete__(self,instance):
    print('正在删除变量:',self.attr)
    print('唔,这个变量没法删除')
>>>class Test:
  x=MyDes(10,'x')
>>>test = Test()
>>>test.x
10
>>>test.x=8
正在修改变量: x
>>>test.x
8
>>>del test.x
正在删除变量: x
这个变量没法删除
>>>test.x

Python笔记(二十五)_魔法方法_描述符的相关教程结束。

《Python笔记(二十五)_魔法方法_描述符.doc》

下载本文的Word格式文档,以方便收藏与打印。