- 根据用户输入的内容,导入模块
#根据用户输入的内容,导入模块 inp = input("请输入模块名: ") print(inp,type(inp)) dd = __import__(inp) r = dd.f1() print(r) inp = input('请输入模块:') inp_func = input('请输入要执行的函数:') #_-import__用于以字符串的形式导入模块 dd = __import__(inp)
-
以字符串的形式去某个模块中寻找函数
1 #getattr 用于以字符串的形式去某个模块中寻找函数 2 target_func = getattr(dd,inp_func,None) 3 #在获取到的函数名后加()表示执行函数 4 #result = target_func() 5 print( target_func) 6 7 import commo 8 9 #判断函数是否存在 10 r = hasattr(commo,'AGE') 11 print(r) 12 13 #设置函数 14 setattr(commo,'AGE',lambda a:a+1) 15 r = hasattr(commo,'AGE') 16 print(r) 17 18 #删除成员 19 delattr(commo,'NAME') 20 r = hasattr(commo,'NAME') 21 print(r)
- 导入模块扩展方法:
方法1、import 模块
方法2、a = __import__(“模块名”)
方法3、 a = __import__(‘lib.test.com’,fromlist=True)
方法举例:
1 #index.py 2 from lib import account 3 4 url = input("请输入url: ") 5 if url.endswith("login"): 6 a = account.login() 7 print(a) 8 elif url.endswith('logout'): 9 b = account.logout() 10 print(b) 11 elif url.endswith('nb'): 12 c = account.nb() 13 print(c) 14 else: 15 print("404") 16 17 18 #account.py 19 def login(): 20 return "login" 21 22 def logout(): 23 return "logout" 24 25 def nb(): 26 return "牛逼网页" 27 28 输出结果: 29 请输入url: www.hao.com/nb 30 牛逼网页
- 方法二目录结构如下:
1 url = input("请输入url: ") 2 inp = url.split('/')[-1] 3 if hasattr(account,inp): 4 target_func = getattr(account,inp) 5 r = target_func() 6 print(r) 7 else: 8 print('404')
- 方法三目录结构,多模块目录结构情况下进行动态导入模块,如下:
1 #模块名/函数名 2 url = input("请输入url: ") 3 4 target_module,target_func = url.split('/') 5 m = __import__("lib." + target_module,fromlist=True) 6 7 if hasattr(m,target_func): 8 target_func = getattr(m,target_func) 9 r = target_func() 10 print(r) 11 else: 12 print('404') 13 14 15 输出结果: 16 请输入url: order/add_order 17 添加订单
- 利用反射查看面向对象成员归属
1 class Annimal: 2 def __init__(self): 3 print("父类构造方法") 4 self.ty = "动物" 5 def eat(self): 6 print("%s%s在吃东西" % (self.name,self.n)) 7 8 class Cat(Annimal): 9 def __init__(self,name): 10 print("子类构造方法") 11 self.name = name 12 self.n = "猫" 13 super(Cat,self).__init__() #常用第一种方法,执行父类初始化数据 14 #Annimal.__init__(self) #第二种方法 15 16 #数据初始化 17 c = Cat("张三的") 18 c.eat() 19 print(c.__dict__) 20 21 #反射:对象,即可以找对象,又可以找类的成员 22 r1 = hasattr(c,'eat') 23 print(r1) 24 r2 = hasattr(c,'name') 25 print(r2)
- 利用反射导入模块、查找类、创建对象、查找对象中的成员
1 #!/usr/bin/env python 2 #coding=utf-8 3 __author__ = 'yinjia' 4 5 #test3.py 6 class Foo: 7 def __init__(self,name): 8 temp = "xxx" 9 self.name = name 10 11 def show(self): 12 print('show')
1 #!/usr/bin/env python 2 #coding=utf-8 3 __author__ = 'yinjia' 4 5 #test4.py 6 #导入模块 7 m = __import__("test3",fromlist=True) 8 9 #去模块中找类 10 class_name = getattr(m,"Foo") 11 12 #根据类创建对象 13 obj = class_name("Yinjia") 14 15 #去对象中找name对应的值 16 val = getattr(obj,'name') 17 print(val)