importlib-根据字符串导入模块和反射的应用

实例一

 

 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中

 

 

 

posted @ 2020-05-02 17:07  zh_小猿  阅读(116)  评论(0编辑  收藏  举报