我的模块.py(自定义的模块):
# 全局变量
title = "模块1"
# 函数
def say_hello():
print("我是 %s" % title)
# 类
class Dog(object):
pass
# 类
class Cat(object):
pass
demo.py(from...import 导入模块):
import 我的模块 as 模块别名 # 导入模块中的所有工具,同时为模块指定别名。 别名推荐使用大驼峰命名法
from 我的模块 import Dog # from...import 导入模块中的部分工具(全局变量/函数/类)
# from 我的模块 import * # 导入模块中的所有工具(不推荐,函数同名不好排查). 后导入的工具会覆盖先导入的同名工具
from 我的模块 import Cat as Cat2 # 为导入的工具指定别名,防止与其他模块中的工具重名
模块别名.say_hello() # 模块名.工具 的方式使用模块中的工具
dog = Dog() # from...import的方式导入的工具,不需要通过模块名可以直接使用
cat = Cat2() # Cat2是为导入的工具指定的别名
demo.py(重新加载模块,热加载,reload):
import test
from imp import reload
print(test.age)
# 重新加载模块(该模块必须已经在之前加载成功)
reload(test) # 在不关闭python解释器的情况下重新加载之前的模块。
print(test.age)
demo.py(跨模块开发的注意事项):
import test1
from test2 import age2
from test2 import list_1
test1.age += 1 # 通过点.的方式修改源模块中的变量值,源模块中的变量会真正修改
print(test1.age)
age2 += 1 # 这种方式只是修改当前模块中的引用,并没有修改源模块中变量的值
print(age2)
list_1.append(5) # 通过list原生方法,可以修改源模块中list的值。
print(list_1)
demo.py(动态导入,__import__()函数动态导入模块):
module_name = "模块名" # 可以动态设置模块名
func_name = "模块中的资源名" # 可以动态指定模块中的资源。
my_module = __import__(module_name) # my_module指向了导入的模块
my_func = getattr(my_module, func_name) # 此时my_func就指向了指定模块中的指定资源。