关于Python的模块

Python的模块

  • 在python中,任何一个python文件都可以看作一个模块
  • 不同包下有相同模块名并不会冲突,且包下必须有文件__init__.py
  • from lib import * 意思是从包lib中导入所有模块(若lib为模块名则为导入模块的所有函数)
  • from lib.module1 import test 意思是从lib这个包下的module1模块中导入函数test
  • import导入模块时会从sys.path输出的结果路径中查找模块然后导入
  • sys.path.append('D:/xx/xx/xx/code')可以添加搜索路径
  • 使用if __name__ == '__main__':

实例

  • 文件结构如下
    {{% fluid_img src="/img/post/python_module_file_tree.png" alt="模块目录结构.png" %}}

  • 测试文件test.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from package1 import * #导入包package1下的所有模块
import package2.module3 #导入包package2下的module3模块
import package2.module4 as s #导入包package2下的module4模块并重命名为s

a = module1.Class1() #创建一个对象
a.test() #调用类中的方法

b = module2.Class2()
b.test()

c = package2.module3.Class3()
c.test()

d = s.Class4()
d.test()
  • 包package1

    • init.py
    #这个文件可以为空
    
    __all__ = ['module1', 'module2'] #有这一句才能使用import *导入所有模块
    
    • module1.py
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    'this is test moudle'
    
    __author__ = 'reber'
    
    import sys
    
    class Class1(object):
        """docstring for Class1"""
        def __init__(self):
            super(Class1, self).__init__()
            
        def test(self):
            print "package1 -> module1.py -> Class1 -> test()"
    
        def main(self):
            print "this is module1.py main()"
    
    if __name__ == '__main__':
        sub11 = Class1()
        sub11.test()
        sub11.main()
    
    • module2.py
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    'this is test moudle'
    
    __author__ = 'reber'
    
    import sys
    
    class Class2(object):
        """docstring for Class1"""
        def __init__(self):
            super(Class2, self).__init__()
            
        def test(self):
            print "package1 -> module2.py -> Class2 -> test()"
    
        def main(self):
            print "this is module2.py main()"
    
    if __name__ == '__main__':
        sub11 = Class2()
        sub11.test()
        sub11.main()
    
  • 包package2

    • init.py
    
    __all__ = ['module3', 'module4']
    
    • module3.py
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    'this is test moudle'
    
    __author__ = 'reber'
    
    import sys
    
    class Class3(object):
        """docstring for Class1"""
        def __init__(self):
            super(Class3, self).__init__()
            
        def test(self):
            print "package2 -> module3.py -> Class3 -> test()"
    
        def main(self):
            print "this is module3.py main()"
    
    if __name__ == '__main__':
        sub11 = Class3()
        sub11.test()
        sub11.main()
    
    • module4.py
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    'this is test moudle'
    
    __author__ = 'reber'
    
    import sys
    
    class Class4(object):
        """docstring for Class4"""
        def __init__(self):
            super(Class4, self).__init__()
            
        def test(self):
            print "package2 -> module4.py -> Class4 -> test()"
    
        def main(self):
            print "this is module4.py main()"
    
    if __name__ == '__main__':
        sub11 = Class4()
        sub11.test()
        sub11.main()
    
  • 执行python test.py结果


    python_module_test_result.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 两本不错的书: 《Python参考手册》:对Python各个标准模块,特性介绍的比较详细。 《Python核心编程...
    静熙老师哈哈哈阅读 3,386评论 0 80
  • 1、开启公众号开发者模式 公众平台的技术文档目的为了简明扼要的交代接口的使用,语句难免苦涩难懂,甚至对于不同的读者...
    good7758阅读 1,548评论 0 1
  • 对于失恋的人而言,最痛苦最煎熬的是回忆,而遗忘又是一件多么奢侈的事情,往后,有一些电影不能再看,有一些话不能再提,...
    雯哥阅读 635评论 2 5
  • 文/忧喜 经常有朋友问,有没有一种直接的方式可以让本不喜欢葡萄酒的人喜欢上葡萄呢?答案肯定是有的。 多年前,笔者我...
    忧喜阅读 368评论 0 3