1.什么是反射?
反射的概念是有Smith在1982年首次提出的,主要是指程序可以访问、检测和修正它本身状态或行为的一种能力(自省)。
2.以下四个方法可以实现自省
hasattr(object,name)
getattr(object,name,default=None)
setattr(x,y,v)
delattr(x,y)
class Car: feture = ‘big‘ def __init__(self,name,color): self.name = name self.color = color def get_car(self): print(‘this car is %s‘ %self.name) def color_car(self): print(‘this car is %s ‘ % self.color) c1 = Car(‘benchi‘,‘red‘) print(hasattr(c1,‘name‘)) # 查看是否能调用name这个属性 print(getattr(c1,‘name‘)) # 查看调用name后的值 setattr(c1,‘size‘,‘big‘) # 修改 print(c1.__dict__) del c1.size # 删除 print(c1.__dict__)
运行结果:
True benchi {‘name‘: ‘benchi‘, ‘color‘: ‘red‘, ‘size‘: ‘big‘} {‘name‘: ‘benchi‘, ‘color‘: ‘red‘} Process finished with exit code 0
3.导入动态模块名称
第一种导入方法:
a = __import__(‘字符串‘)
print(a)
例如m1文件夹下的b中的test模块
a = __import__(‘m1.b‘) # 只能定位到m1 . 可以print(a)试一下
a.b.test()
第二种导入方法:
import importlib
a = importlib.import_module(‘m1.b‘) # 直接定位到b 。可以print(a)试一下
m.test
4.补充封装私有
如果导入模块时,假如test前面有_代表私有,隐藏属性。导入时也需要加上_,不然会报错无法访问。
原文:https://www.cnblogs.com/liujinjing521/p/11799977.html