Python描述符Descriptor简单使用
来源:互联网 发布:淘宝退货退款流程图 编辑:程序博客网 时间:2024/05/18 20:36
实现了__set__(), __get__()或__delete__()的对象,且描述符属性只能定义在类级别。
@property可利用描述符实现。(@classmethod, @staticmethod等也可以用描述符实现)
利用描述符来进行类型检查。
Python中属性引用解析的执行方式,优先级链搜索属性。数据描述符(实现了__set__(), __get__())优先级>实例变量>非数据描述符(只实现__get__())。在下例中实际给属性赋值时, u_0.name='test'
等同于type(u_0).__dict__['name'].__set__(u_0, 'test')
,取值,访问属性u_.name
等同于type(u_0).__dict__['name'].__get__(u_0, type(u_0))
class Field(object): _expected_type = type(None) def __init__(self, name): self.name = name def __set__(self, instance, value): if not isinstance(value, self._expected_type): raise TypeError('excepted %s' % self._expected_type) # setattr(instance, self.name, value) instance.__dict__[self.name] = value def __get__(self, instance, owner): if not instance: return self # getattr(instance, self.name) return instance.__dict__[self.name]class StringField(Field): _expected_type = strclass IntField(Field): _expected_type = intclass User_0(object): name = StringField('name') age = IntField('age') def __init__(self, name, age): self.name = name self.age = ageu_0 = User_0(name='JiangW', age=22)u_0.name = 'test'print(u_.age)# TypeError: excepted <class 'int'># User_0(name='JiangW', age='22')
其他方式实现类型检查。
利用函数和@property。property实际是一个描述符类,CheckType()方法返回的实际是一个<class 'property'>
的对象, 该对象也是实现了__set__(), __get__()。
def CheckType(name, expected_type): _name = name @property def res(self): return getattr(self, _name) @res.setter def res(self, value): if not isinstance(value, expected_type): raise TypeError('excepted type %s' % excepted_type) setattr(self, _name, value) return res
0 0
- Python描述符Descriptor简单使用
- python描述符Descriptor
- python 描述符descriptor
- python描述符 descriptor
- 16.2 Python descriptor(描述符)
- Python描述符(descriptor)解密
- Python描述符(descriptor)解密
- Python描述符(descriptor)解密
- Python描述符(descriptor)解密
- Python描述符(descriptor)解密
- Python 描述器 descriptor
- Python descriptor 描述器
- Python描述符(descriptor)详解及应用场景
- 文件描述符 (file descriptor)
- Python描述符(descriptor)解密 属性(property)、以及装饰器(decorator)
- python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解
- Hid Report Descriptor 报告描述符
- 关于文件描述符(File descriptor)
- MATLAB中用plot命令画出示波器的图形方法
- 重构总结 第一课
- Validate IP Address
- 回调函数打形象解释
- python学习语法
- Python描述符Descriptor简单使用
- BZOJ1002 轮状病毒 (DP 高精度)
- nova schedule 调度器之FilterSchedulerz中的 get_filtered_hosts
- 【TensorFlow_Fold】配置在Jupyter Notebook下的Fold代码环境
- Hello World Servlet
- 共享内存映射之mmap()函数详解
- 9-TCP 协议(连接异常)
- NavigationView中获取headerLayout实现点击事件的方法
- poj1050 to the Max