python之描述符

描述符是将某种特殊类型的类实例指派给另一个类的属性,某种特殊类型的类就是这个类里面封装了get,set,delete这三个方法,可以将这个类指派给另一个类的某一个属性,这样就可以通过这三个方法对该属性进行操作,举例如下

 1 class MyDecriptor:
 2     def __set__(self,instance,value):
 3         print(‘set‘)
 4     def __get__(self,instance,owner):
 5         print(‘get‘)
 6     def __delete__(self,instance):
 7         print(‘delete‘)
 8 class A:
 9     x=MyDecriptor()
10 a= A()
11 get
12 a.x=1
13 set
14 get
15 del a.x
16 delete

python中property()方法就是通过描述符的原理是实现的

 1 class Myproperty:
 2     def __init__(self,fget=None,fset=None,fdel=None):
 3         self.fget=fget
 4         self.fset=fset
 5         self.fdel=fdel
 6     def __set__(self,instance,value):
 7         return self.fset(instance,value)
 8     def __get__(self,instance,owner):
 9         return self.fget(instance)
10     def __delete__(self,instance):
11         self.fdel(instance)
 1 class C:
 2     def __init__(self):
 3         self._x=None
 4     def __setX__(self,value):
 5         self._x=value
 6     def __getX__(self):
 7         return self._x
 8     def __delX__(self):
 9         del self._x
10     x= Myproperty(__getX__,__setX__,__delX__)
 1 c= C()
 2 c.x=1
 3 c._x
 4 1
 5 c.x
 6 1
 7 del c.x
 8 c._x
 9 Traceback (most recent call last):
10   File "<input>", line 1, in <module>
11 AttributeError: ‘C‘ object has no attribute ‘_x‘

原文地址:https://www.cnblogs.com/ymzh/p/8413640.html

时间: 2024-11-09 03:36:42

python之描述符的相关文章

python Descriptor (描述符)

简介: python 描述符是新式类(继承自object)中的语言协议,基于描述符可以提供更佳优雅的解决方案. python的classmethod, staticmethod, property都是基于描述符建立的. 描述符的协议: 定义了__set__, __get__, __delete__3个方法中任何一个方法的object可以作为描述符. 描述符分类: 同时定义了__set__,__get__被叫做data descriptor. 只定义了__get__被叫做no-data descr

Python属性描述符(一)

描述符是对多个属性运用相同存取逻辑的一种方式,,是实现了特性协议的类,这个协议包括了__get__.__set__和__delete__方法.property类实现了完整的描述符协议.通常,可以只实现部分协议,如只实现了__get__或__set__,而不必把__get__.__set__和__delete__全部实现 现在,让我们用描述符协议升级上一个章节Python动态属性和特性(二)的LineItem类 图1-1 我们将定义一个Quantity类,LineItem类会用到两个Quantit

Python属性描述符(二)

Python存取属性的方式特别不对等,通过实例读取属性时,通常返回的是实例中定义的属性,但如果实例未曾定义过该属性,就会获取类属性,而为实例的属性赋值时,通常会在实例中创建属性,而不会影响到类本身.这种不对等的方式对描述符类也有影响. def cls_name(obj_or_cls): # 传入一个实例,返回类名 cls = type(obj_or_cls) if cls is type: cls = obj_or_cls return cls.__name__.split('.')[-1] d

Python进阶-----描述符(__get__(),__set__(),__delete__())

一.描述符是什么 描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议 __get__():调用一个属性时,触发 __set__():为一个属性赋值时,触发 __delete__():采用del删除属性时,触发 1 class Foo: #在python3中Foo是新式类,它实现了三种方法,这个类就被称作一个描述符 2 def __get__(self, instance, owner): 3 prin

python 属性描述符及属性查找顺序

1 import numbers 2 class IntField: # 当一个类实现了 __get__, __set__, __delete__ 3 """ 4 数据描述符 5 """ 6 def __get__(self, instance, owner): 7 return self.value 8 def __set__(self, instance, value): 9 if not isinstance(value, numbers.

python tips:描述符descriptor

描述符(descriptor)是实现了__get__.__set__.__del__方法的类,进一步可以细分为两类: 数据描述符:实现了__get__和__set__ 非数据描述符:没有实现__set__ 描述符在类的属性调用中起着很重要的作用,类在调用属性时,遵守两个规则: 按照实例属性.类属性的顺序选择属性,即实例属性优先于类属性 如果在类属性中发现同名的数据描述符,那么该描述符会优先于实例属性 非数据描述符会被实例属性覆盖 class A: def __get__(self, obj, c

[TimLinux] Python 自定义描述符

1. 含义 在类中,含有属性(该属性需要存在类对象到__dict__属性中,不能为存在示例对象的__dict__属性中),对属性对操作(访问,设置值,删除)可以自定义行为,这样对自定义行为成为自定义属性描述符(Descriptor),这样的属性对象来自相应对类,这样的类称为描述符类. 2. 结构 class A(object): pass # 实现任一一个或多个:__get__, __set__, __delete__, __set_name__ # 类A称为描述符类 class T(objec

python之描述符的应用

class Foo: def __init__(self,key,hope_type): self.key=key self.hope_type=hope_type def __get__(self, instance, owner): print('输出get') return instance.__dict__[self.key] def __delete__(self, instance): print('输出delete') instance.__dict__.pop(self.key)

转载python描述符介绍

来源:http://www.ibm.com/developerworks/cn/opensource/os-pythondescriptors/ 简介 Python 2.2 引进了 Python 描述符,同时还引进了一些新的样式类,但是它们并没有得到广泛使用.Python 描述符是一种创建托管属性的方法.除了其他优点外,托管属性还用于保护属性不受修改,或自动更新某个依赖属性的值. 描述符增加了对 Python 的理解,改善了编码技能.本文介绍了描述符协议,并演示了如何创建和使用描述符. 描述符协