https://docs.python.org/3/library/functions.html#import

__import__()是一个内部函数,会被import语句所调用,来实现引入模块的功能。所以如果你想改变import的实现,可以import builtins之后把自己定义的版本赋给builtins.__import__就可以了。当然,这是非常hack的做法,99.9%的情况下是用不着的。如果你是想加点钩子的话,用PEP-302里面说的方法会好得多。即使一定要用,用importlib.import_module()也比用__import__()强。

import spam
# 相当于
spam = __import__('spam', globals(), locals(), [], 0)

import spam.ham
# 相当于
spam = __import__('spam.ham', globals(), locals(), [], 0)

from spam.ham import eggs, sausage as saus
# 相当于
_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], 0)
eggs = _temp.eggs
saus = _temp.sausage

__import__(nameglobals=Nonelocals=Nonefromlist=()level=0) 几个参数的说明:

  1. level默认是0,是表示只进行absolute import. 1的话就是当import这个模块的时候,被import的模块里的import语句会在相对位置一层里去找(绕口);
  2. fromlist就是import xxx as里面as后面的变量;
  3. globals和locals是什么意思来着?我继续看看。

在python里面几乎一切功能都是靠方法实现的。例如import就是调用了__import__. ojb.attr(dot operator)就是调用了__getattr__().