本节内容
1、概述
2、知识回顾
3、动态导入模块
一、概述
我们之前导入模块都是用import,或者from ... import ....这种模式去导入模块,那如果我们如何实现只用字符串就可以导入模块呢?我们下面就来说说如何动态导入模块,这个东西还是蛮有用的,通过字符串就可以导入,很方便。
二、知识回顾
静态方法:
与类无关,不能访问类里的任何属性和方法
类方法:
只能访问类变量
属性(@property):
把一个方法变成一个静态属性,例:flight.status->@status.setter->flight.status = 3->@status.delter
反射:
getattr(obj,str),hasattr(obj,str),setattr(obj,str),delattr(obj,str)
三、动态导入模块
前置条件:需要导入的模块的目录结构
3.1、__import__方式
说明:这种方式只能到第一层级别
1
2
3
4
5
6
7
8
9
|
mod = __import__ ( "lib.aa" )
print (mod) #打印模块信息
c_instance = getattr (mod.aa, "C" ) #或者写成c_instance = mod.aa.C()
c_obj = c_instance()
print (c_obj.name)
#输出 <module 'lib' from 'D:\\PycharmProjects\\pyhomework\\day8\\回顾上节\\lib\\__init__.py' > #只导入lib级别
zhangqigao |
3.2、importlib方式
说明:这种方式比较好,也是官方推荐的,它能助学导入到最后一个层级,就是你导入的哪个模块就到哪个层级
1
2
3
4
5
6
7
8
9
10
|
import importlib
mod = importlib.import_module( "lib.aa" )
print (mod) #打印导入模块信息
c_instance = mod.C #又可写成 c_instance = getattr(mod,"C")
c_object = c_instance()
print (c_object.name)
#输出 <module 'lib.aa' from 'D:\\PycharmProjects\\pyhomework\\day8\\回顾上节\\lib\\aa.py' > #到aa.py级别
zhangqigao |
总结:
- __import__方式是python内置函数,是python自己用的,而且知道第一层,所以极力不推荐
- importlib这种方式是官方推荐的,用起来比较简单,而且导入到那哪里就到哪里,极力推荐