我是靠谱客的博主 神勇镜子,最近开发中收集的这篇文章主要介绍python 不同包间模块引用 python  ,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

python 

 python 类,模块,包

Python在处理功能复用和功能颗粒度划分时采用了类、模块、包的结构。

类:类的概念在许多语言中出现,很容易理解。它将数据和操作进行封装,以便将来的复用。类写在模块里。

模块:通常是一个python文件,定义了某些函数和变量。你在其他需要这些功能的文件中,导入这模块,就可重用这些函数和变量。一般用module_name.fun_name,和module_name.var_name进行使用。

包:包对应于文件夹,包含许多模块。我们一般将某些功能相近的模块放在同一个包中。使用包的方式跟模块也类似,唯一需要注意的是,当文件夹当作包使用时,文件夹需要包含__init__.py文件,主要是为了避免将文件夹名当作普通的字符串。__init__.py的内容可以为空,一般用来进行包的某些初始化工作或者设置__all__值,__all__是在from package-name import *这语句使用的,全部导出定义过的模块。

不同包间类,函数,变量的引用

目录如下:

work:#工作目录
    package1
        __init__.py
        module1.py
            func1()
    package2
        __init__.py
        module2.py
            func2()
    main.py
        main()#主程序

(1) 在module1中调用module2中的func2

     首先需要找到module2,用如下代码声明mudule2路径(其实是将mudule2路径加入到sys.path中):

#__init__.py

import os
import sys
sys.path.append(os.getcwd()+"\package2\module2")
    此时,可以在module1中调用func2:
#module.py

from package2.module2 import func2

def func1():
    func2()
    print "This is func1"
    ...
注意:此时运行module1会报错,若查看sys.path可看到我们添加的路径变为..workingpackage1package2module2,显然,这个路径并不是module2的路径,原来错误在这里,那么到底怎么回事呢?记得os.getcwd()吗,它是返回当前运行模块所在目录,而我们运行mudule1,因此...

(2) 在main.py中调用func1:

# main.py
from package1.module1 import func1

def main():
    func1()

if __name__ == "__main__":
    main()
注意:i) 此时从main.py调用func1,并没有事先声明module1的路径

        ii) 运行main.py, 你猜,程序能够正确运行么?没错,此时,可以得到正确的输出。

#假如 func2 的功能是打印一条 “this is func2”

#输出如下:

This is func2
This is func1

方法(2)

不需要添加路径,利用__all__,参考博文

具体操作为,在每个包的__init__.py文件中用__all__指定要引用的模块。如:

# package1__init__.py
__all__=["module1"]

#package2__init__.py
__all__=["module2"]

转载于:https://my.oschina.net/u/811744/blog/176056

最后

以上就是神勇镜子为你收集整理的python 不同包间模块引用 python  的全部内容,希望文章能够帮你解决python 不同包间模块引用 python  所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部