python 模块导入之循环导入和类关联导入

1.类关联模块的导入
直接将两个关联的模块全部导入,就可以实现类关联
用户发表文章
创建用户对象

发表文章,文章对象

//
from article.models import Tag  #如果要用类关联,就导入两个关联的类
from article.models import Article
tag=Tag('admin')   #-->tag就是通过导入Tag类创建的

i=Article('个人总结','家伟')
tag.publish_article(i)


#如果是article包中的模块想用外部的calculate.py ,就涉及内部模块调用外部模块,
#因为calculate是在项目底下,而models在article包底下,
#项目地下的模块直接 import calculate 即可 ,
#项目》包中的models from article import models

以下为模块被循环导入

//
"""
    模块循环导入
        A:模块
            def test():
                f()

        B: 模块
            def f()
                test()
    造成这种情况是架构出问题了,你引用我,我又引用你,无限循环导入
    这是一种错误的方式,
    在大型py项目中,需要很多python,由于架构不当,会出现相互引用模块
    避免产生循环导入:
        1.重新架构
        1.from导入马上会使用名字,极容易出现错误,建议循环导入情况下,使用import导入
#       2.先提前产生名字,在导入模块
#       3.在导入逻辑放在函数中,将导入的逻辑延后到函数的调用,只要调用在产生名字后即可
#       4,if __name__=='__main__':  该方法可以阻止一个无用代码被重复调用多次
#       5.把导入的语句放在最后,先让函数们加载完

"""

循环导入导致的问题:
两个模块直接相互导入,且相互使用其名称空间中的名字,但是有些名字没有产生就使用,就出现了循环导入问题

解决循import m4环导入问题:延后导入 - 但产生对方要使用的名字,再去完成导入对方

1.from导入马上会使用名字,极容易出现错误,建议循环导入情况下,使用import导入
2.先提前产生名字,在导入模块
3.在导入逻辑放在函数中,将导入的逻辑延后到函数的调用,只要调用在产生名字后即可
4,if name==‘main’: 该方法可以阻止一个无用代码被重复调用多次
5.把导入的语句放在最后,先让函数们加载完

//  
#模块的循环导入1.py
import 模块的循环导入2
def task1():
    print('--------------task1----------------')

def task2():
    print('--------------task2----------------')


模块的循环导入2.func()

#模块的循环导入2.py
def func():
    print('循环导入2 里面的func  --1--')
    from 模块的循环导入1 import task1 #重点! 解决模块循环导入的解决办法 放入函数中导用,函数结束后他自己也结束了
    task1()
    print('循环导入2 里面的func  --2--')

if __name__=='__main__':  #还有一种方法是name=main,可以阻止多次无用调用,让界面更整洁
    func()

// 
# import 模块的循环导入1   #模块1加载模块2时 先执行的就是import 那么import会导致重回模块1中,所以不将他放到头部,放到函数内调
# 这就将导致每次循环导入的第二次时,就会被函数func阻断,实现了终止循环导入的目的
#
# 循环导入导致的问题:
# 两个模块直接相互导入,且相互使用其名称空间中的名字,但是有些名字没有产生就使用,就出现了循环导入问题
#
# 解决循import m4环导入问题:延后导入 - 但产生对方要使用的名字,再去完成导入对方
#
# 1.from导入马上会使用名字,极容易出现错误,建议循环导入情况下,使用import导入
# 2.先提前产生名字,在导入模块
# 3.在导入逻辑放在函数中,将导入的逻辑延后到函数的调用,只要调用在产生名字后即可
# 4,if __name__=='__main__':  该方法可以阻止一个无用代码被重复调用多次
# 5.把导入的语句放在最后,先让函数们加载完

猜你喜欢

转载自blog.csdn.net/weixin_43516990/article/details/108905691