Python概念-Attr系列(林海峰教的)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python概念-Attr系列(林海峰教的)相关的知识,希望对你有一定的参考价值。

这个Attr系列是egon老师自创的,个人还是可以接受这种文化底蕴的,所以直接拿来用,也是毫无违和感的

所谓Attr系列,其实是__setattr__,__delattr__,__getattr__ 三个函数,从名字中可以看出来这是一套设置,删除,查询的函数,那我们来一个一个的看:

__setattr__(self):当对类中的某个属性进行"赋值"时触发的函数

代码示例:

 

 1 class Teacher:
 2     def __init__(self):
 3         self.name = "Egon"
 4     def __setattr__(self, key, value):#当self.name被赋值时出发函数__setattr__
 5         self.__dict__[key] = value 
       #将name:egon存放在self的命名空间中也就是在字典中添加一个键值对(key:value) 6 print(key,"已被赋值:",value) 7 8 te = Teacher()#实例化Teacher类,此时已经出发了self.name的赋值 9 10 #name 已被赋值: Egon

 

__delattr__(self):当对类中的某个属性进行"删除"时触发的函数

代码示例:

class Teacher:
    def __init__(self):
        self.name = "Egon"
    def __delattr__(self, item):#当self.name被赋值时出发函数__delattr__
        self.__dict__.pop(item)#将self命名空间中name键连同value一起删除
        print(item,"已被删除")

te = Teacher()
del te.name#触发了__delattr__()的方法执行

__getattr__(self):当调用的名字,"没有在实例化对象或类中出现时",触发的函数

代码示例:一定要注意,这里是没有找到名字的时候触发

1 class Teacher:
2     def __init__(self):
3         self.name = "Egon"
4     def __getattr__(self, item):#没有找到属性或方法时,执行次函数
5         print("没有",item,"属性")
6 
7 te = Teacher()
8 te.sbegon#很明显Teacher中和te中都是没有sbegon这个属性或方法的,所以触发__getatter__()方法

以上就是Attr系列的小总结

 


以上是关于Python概念-Attr系列(林海峰教的)的主要内容,如果未能解决你的问题,请参考以下文章

python常用模块-------转自林海峰老师

python反射及其attr系列案例

python基础之socket编程 (转自林海峰老师)

网络基础之网络协议篇(转自林海峰老师)

50个查询系列-第七个查询:查询学过“叶平”老师所教的所有课的同学的学号姓名

50个查询系列-第13个查询:把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;