写作时间:2022.1.20
反射简而言之就是可以通过字符串的形式来操作对象的属性和方法。
反射又叫映射、自省,它包括四个主要的函数:
setattr()、delattr()、hasattr()、getattr()
关于反射的用途,假设别人给你一个实例化的对象person,然后你需要判断这个实例是否有一个具体的属性"sex",用if person.sex语句去判断的话直接会报错,程序也就停止运行了,这时可以用python反射相关函数。
hasattr(实例名称,str(属性名))来判断一个实例是否含有某一属性:
hasattr(实例名称,str(方法名))来判断一个实例是否含有某一方法:
getattr(实例名称,str(属性名))可以用来获取一个实例某一个具体属性的值。
getattr(实例名称,str(属性名))可以用来获取一个实例的一个方法,注意此时拿到的是方法,执行的话需要调用:
setattr(实例名称,str(属性名),属性值)可以为实例增加新的属性。
setattr(实例名称,str(类名),属性值)可以为类增加新的属性。
setattr(实例名称,str(方法名),方法)可以为实例增加新的方法,这里注意增加新的方法之后调用的时候要给定实例,因为我们增加的方法是要和特定实例绑定在一起的,没绑定的实例没有新增加的方法。
setattr(实例名称,str(类名),方法)可以为整个类增加新的方法,这时候所有实例的对象都会拥有新增加的方法,之前创建过的实例和之后要创建的实例都有这个新增加的方法。
delattr(实例名称,str(属性名))可以删除实例的某一属性。
delattr不能删除整个类的某一初始化属性。
下面这个例子中,当前执行的文件是反射.py,可以看到__name__=__main___
在其他文件中导入上面的反射.py,下图中当前执行的文件时123.py,可见__name__=反射,也就是说,如果是被其他模块导入执行的,__name__=模块名
在一个文件中(动态导入.py)导入另一个文件(123213.py)的内容的方式。