浅谈对属性描述符__get__、__set__、__delete__的理解
1、属性描述符的基础介绍1.1 何为属性描述符?
属性描述符是一种Python语言中的特殊对象,用于定义和控制类属性的行为。属性描述符可以通过定义__get__、__set__、__delete__方法来控制属性的读取、赋值和删除操作。
通过使用属性描述符,可以实现对属性的访问控制、类型检查、计算属性等高级功能。
如果一个对象定义了这些方法中的任何一个,它就是一个描述符。
看完上面的文字描述,是不是感觉一头雾水,没关系,接下来通过一个简单的案例来讲解属性描述符的作用。
1.2 为什么需要属性描述符?
假设我们现在要做一个成绩管理系统,在定义学生类时,我们可能这样写:
class Student(object):
def __init__(self, name, age, cn_score, en_score):
self.name = name
self.age = age
self.cn_score = cn_score
self.en_score = en_score
def __str__(self):
return "Student: {},age:{},cn_score:{},en_score:{}".format(self.name, self.age, self.cn_score, self.en_score)
xiaoming = Student("xiaoming", 18, 70, 55)
print(xiaoming)1.2.1 init函数中做参数校验
因为python是动态语言类型,不像静态语言那样,可以给参数指定类型,所以在传参时,无法得知参数是否正确。比如,当cn_score传入的值为字符串时,程序并不会报错。这个时候,一般就会想到对传入的参数做校验,当传入的参数不符合要求时,抛错。
class Student(object):
def __init__(self, name, age, cn_score, en_score):
self.name = name
if not isinstance(age, int):
raise TypeError("age must be int")
if age <= 0:
raise ValueError("age must be greater than 0")
self.age = age
if not isinstance(cn_score, int):
raise TypeError("cn_score must be int")
if 0 <= cn_score <= 100:
raise ValueError("cn_score must be between 0 and 100")
self.cn_score = cn_score
if not isinstance(en_score, int):
raise TypeError("en_score must be int")
if 0 <= en_score <= 100:
raise ValueError("en_score must be between 0 and 100")
self.en_score = en_score
def __str__(self):
return "Student: {},age:{},cn_score:{},en_score:{}".format(self.name, self.age, self.cn_score, self.en_score)
xiaoming = Student("xiaoming", -1, 70, 55)
print(xiaoming)参考链接:
【案例讲解】Python为什么要使用描述符?
[属性描述符:__get__函数、__set__函数和__delete_函数](
来源:https://www.cnblogs.com/huageyiyangdewo/p/17311733.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页:
[1]