python 属性描述符
2024-09-03 19:49:51
import numbers class IntField: # 一个类只要实现了这个魔法函数,那么它就是属性描述符
#数据描述符
def __get__(self, instance, owner): # 在属性获取的时候会进入这个方法
return self.value def __set__(self, instance, value): # 在属性设置的时候会进入这个方法
if not isinstance(value, numbers.Integral):
raise ValueError("int value need")
if value < 0:
raise ValueError("positive value need")
self.value = value def __delete__(self, instance): # 在属性删除的时候会进入这个方法
pass class User:
age = IntField() # 这里定义了的话 下面也可以调用 user = User()
print(user.age) # 这里会在实例中新创建一个age变量,但是类变量中的age保持不变
user = User(), 那么user.age 顺序如下: (1)如果“age”是出现在User或其基类的__dict__中, 且age是data descriptor, 那么调用其__get__方法, 否则 (2)如果“age”不是data descriptor, 并且出现在user的__dict__中, 那么直接返回 obj.__dict__[‘age’], 否则 (3)如果“age”出现在User或其基类的__dict__中 (3.1)如果age是non-data descriptor,那么调用其__get__方法, 否则 (3.2)如果age不是数据描述符,返回User类中的 __dict__[‘age’] (4)如果User有__getattr__方法,调用__getattr__方法,否则 (5)抛出AttributeError
最新文章
- Spark-1.5.1 on CDH-5.4.7
- ubuntu 搭建maven库 2.14.2-01并配置离线索引文件
- Python基础5- 运算符
- c++之map
- 56. Edit Distance &;&; Simplify Path
- 玩转数据库之 Group by Grouping
- C语言 负数取余的原理
- (转)LitJson 遍历key
- C#中的 序列化和反序列化
- Linux bash shell脚本语法入门
- SpringMVC使用@ResponseBody注解返回中文字符串乱码的问题
- VisJS 随机图
- heritrix 3.2.0 -- 环境搭建
- Chapter 21_5 替换
- Gitlab自动触发Jenkins构建打包
- mpvue小程序开发tips(1)
- QT-简易视频播放器
- Singly linked list algorithm implemented by Java
- svn 部署 配置
- Spring框架中IoC(控制反转)的原理(转)
热门文章
- python网络编程-2
- 8 Best DDoS Attack Tools (Free DDoS Tool Of The Year 2019)
- day09 作业
- linux 本地套接字通信
- PHP数组相关算法
- Ubuntu 18.04安装 CUDA 10.1 、cuDNN 7.6.5、PyTorch1.3
- CRT&;EXCRT学习笔记
- 201871010118-唐敬博《面向对象程序设计(java)》第十六周学习总结
- 201871020225-牟星源《面向对象程序设计(java)》第十一周学习总结
- python3汉诺塔简单实现代码