实例一
oo.py文件:
NAME = "小黑" class Person(object): def __init__(self, name): self.name = name def dream(self): print("{}在做美梦!".format(self.name))
importlib_demo.py文件:
# from xx import oo # # print(oo.NAME) #小黑 # p = oo.Person("赵导") # p.dream() #赵导在做美梦! s = "xx.oo" import importlib # 根据字符串导入模块 # 通常用来导入包下面的模块 o = importlib.import_module("xx.oo") #import_module不能导入类,只能导入模块,xx代表包,oo是模块 # 此时o就代表oo模块,拿到模块之后就可以根据反射可以找到里面的类、变量、函数等等 print(o.NAME) #小黑 p = o.Person("赵导") p.dream() #赵导在做美梦!
#反射的应用:由字符串找类、方法、属性
#---------------------通过字符串找类--------------------------
the_class = getattr(o, "Person") #从模块o中找Person类这个变量,赋值给the_class the_class ==o.Person p2 = the_class("小黑") p2.dream() #小黑在做美梦! #-------------------通过字符串找一个对象的属性------------------------ class Person(object): def __init__(self,name): self.name=name alex=Person("alex") x="name" # print(alex.name) ,但print(alex.x)是错误的 ret=getattr(alex,"name") # 等价于alex.name print(ret) #alex
实例二:rest framework中