- 根据用户输入的内容,导入模块
#根据用户输入的内容,导入模块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.py19 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/nb30 牛逼网页
- 方法二目录结构如下:
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_order17 添加订单
- 利用反射查看面向对象成员归属
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 = name12 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 = name10 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)