反射
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前面有_代表私有,隐藏属性。导入时也需要加上_,不然会报错无法访问。