1.  
  2. 主页
  3.  / 
  4. Python基础到高级
  5.  / 
  6. 反射

反射

反射的定义

反射就是在运行时获取类的信息

我们通过dir获取到的所有的属性和方法,都是反射

getattr、setattr、hasattr

getattr、setattr、hasattr是和反射息息相关的三个方法

getattr的使用详解及参数介绍

setattr的使用详解及参数介绍

setattr对象是实例,直接使用setattr给对象添加方法是不可行的

可以结合types模块中MethodType方法实现动态添加方法

给实例动态添加方法,需要先把函数转换为方法,而types模块中MethodType方法就可以实现把函数转换为方法

hasattr的使用详解及参数介绍

__getattr__、__setattr__、__delattr__

__getattr__、__setattr__、__delattr__是三个魔术方法

当一个类定义了__getattr__方法时,如果访问不存在的成员,会调用__getattr__方法

当类定义了__getattr__方法的时候,成员的查找顺序是__dict__ -> __class__ -> __getattr__

当类实现了__setattr__时,任何地方对这个类的对象添加属性,或者对现有属性赋值,都会调用__setattr__包括在__init__中给对象赋值

当需要对实例属性的修改做一些额外的操作的时候,可以使用__setattr__

同时__setattr__在使用的同时注意的地方有很多,可能在你不经意间就自己给自己挖坑了,所以尽量少的使用__setattr__

当一个实现了**__delattr__**方法时,删除其实例的属性,会调用此方法

__getattribute__

__getattribute__是针对实例的一种优先级最高的方法,当对象实例化后,每次调用对象的成员的时候,都会首先执行__getattribute__操作,非常的不可控,因此也是尽量避免使用

当对象中出现了__getattribute__的方法的时候,那么对象内成员的调用顺序就再次发生了改变:

__getattribute__ -> __dict__ -> __class__ -> __getattr__

这篇文章对您有用吗? 1

我们要如何帮助您?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注