翼度科技»论坛 编程开发 python 查看内容

浅谈对属性描述符__get__、__set__、__delete__的理解

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
1、属性描述符的基础介绍

1.1 何为属性描述符?

属性描述符是一种Python语言中的特殊对象,用于定义和控制类属性的行为。属性描述符可以通过定义__get__、__set__、__delete__方法来控制属性的读取、赋值和删除操作。
通过使用属性描述符,可以实现对属性的访问控制、类型检查、计算属性等高级功能。
如果一个对象定义了这些方法中的任何一个,它就是一个描述符。
看完上面的文字描述,是不是感觉一头雾水,没关系,接下来通过一个简单的案例来讲解属性描述符的作用。
1.2 为什么需要属性描述符?

假设我们现在要做一个成绩管理系统,在定义学生类时,我们可能这样写:
  1. class Student(object):
  2.     def __init__(self, name, age, cn_score, en_score):
  3.         self.name = name
  4.         self.age = age
  5.         self.cn_score = cn_score
  6.         self.en_score = en_score
  7.     def __str__(self):
  8.         return "Student: {},age:{},cn_score:{},en_score:{}".format(self.name, self.age, self.cn_score, self.en_score)
  9. xiaoming = Student("xiaoming", 18, 70, 55)
  10. print(xiaoming)
复制代码
1.2.1 init函数中做参数校验

因为python是动态语言类型,不像静态语言那样,可以给参数指定类型,所以在传参时,无法得知参数是否正确。比如,当cn_score传入的值为字符串时,程序并不会报错。这个时候,一般就会想到对传入的参数做校验,当传入的参数不符合要求时,抛错。
  1. class Student(object):
  2.     def __init__(self, name, age, cn_score, en_score):
  3.         self.name = name
  4.         if not isinstance(age, int):
  5.             raise TypeError("age must be int")
  6.         if age <= 0:
  7.             raise ValueError("age must be greater than 0")
  8.         self.age = age
  9.         if not isinstance(cn_score, int):
  10.             raise TypeError("cn_score must be int")
  11.         if 0 <= cn_score <= 100:
  12.             raise ValueError("cn_score must be between 0 and 100")
  13.         self.cn_score = cn_score
  14.         if not isinstance(en_score, int):
  15.             raise TypeError("en_score must be int")
  16.         if 0 <= en_score <= 100:
  17.             raise ValueError("en_score must be between 0 and 100")
  18.         self.en_score = en_score
  19.     def __str__(self):
  20.         return "Student: {},age:{},cn_score:{},en_score:{}".format(self.name, self.age, self.cn_score, self.en_score)
  21. xiaoming = Student("xiaoming", -1, 70, 55)
  22. print(xiaoming)
复制代码
参考链接:
【案例讲解】Python为什么要使用描述符?
[属性描述符:__get__函数、__set__函数和__delete_函数](

来源:https://www.cnblogs.com/huageyiyangdewo/p/17311733.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具