python 中的 import
程序员文章站
2024-03-13 15:29:57
...
目录
一、import 相关术语
1. module:模块。
如 ".py"、".pyo"、".pyc"、".pyd"、".so"、".dll",等都可以作为一个模块,而”.py" 文件作为模块更为常见。
2. package:
可以是一个目录,如 “./a/b” 可以写为: package = "a.b" 。
3. “__init__.py” :
当一个目录下存在"__init__.py"文件时,可以当成一个模块(module)或者包(package)。
"__init__.py" 可以是一个空文件,也可以有其他内容, 如“from .base import GetMDL, SetVal” 等。
二、 __all__ 属性
当使用"from module import *" 导入时,如果“module.py” 使用了 "__all__", 则只能导入“__all__”列出的项(函数等)
# module_2.py
__all__ = ['f1']
def f1():
print("This is f1 in module_2.py")
def f2():
print("This is f2 in module_2.py")
# main.py
from module_2 import *
f1()
f2()
# 输出为:
This is f1 in module_2.py
Traceback (most recent call last):
File "test_all.py", line 4, in <module>
f2()
NameError: name 'f2' is not defined
也可参考:python中模块的__all__属性详解_python_脚本之家 (jb51.net)
三 、import 相关函数
1. importlib
importlib.import_module(name, package=None)。实际使用是可以有以下方法:
(1)直接法
module = importlib.import_module('Modules.module_3')
(2)拼接法
package = "Modules"
module = importlib.import_module('.module_3', package)
2. python内置函数 __import__( )
方法与importlib.import_module()类似,参考:Python __import__() 函数 | 菜鸟教程 (runoob.com)
四、配套使用的 getattr() 和 setattr()
getattr(object, name[, default]) , setattr(object, name, value)
可以参考:Python getattr() 函数 | 菜鸟教程 (runoob.com) 以及 Python setattr() 函数 | 菜鸟教程 (runoob.com) 。
其中参数object可以是类(class) 也可以是模块(module), 如下:
# ./Modules/module_3.py
num = 3
def f1():
print("This is f1 in module_3")
def f2():
print("This is f2 in module_3")
# module_main.py
import importlib
class CA():
ca_num = 2
@staticmethod
def f4():
print("This is f4 in class CA of module_main.py")
module = importlib.import_module('Modules.module_3')
print("ca_num of class CA :", getattr(CA, 'ca_num'))
getattr(CA, 'f4')()
print("num of module", getattr(module, 'num'))
setattr(module, 'a', 4)
print("a of module ", getattr(module, 'a'))
# 输出结果为:-----------====================---------------
ca_num of class CA : 2
This is f4 in class CA of module_main.py
num of module 3
a of module 4