欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 中的 import

程序员文章站 2024-03-13 15:29:57
...

目录

一、import 相关术语

1. module:模块。

2. package:

3. “__init__.py” :

二、  __all__ 属性

三 、import 相关函数

1. importlib

2.  python内置函数 __import__( )

四、配套使用的 getattr() 和 setattr()


一、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