http://blog.sysuschool.com/u/mygod/index.html
请稍候,载入中。。。
 
请稍候,载入中。。。
2019-4-5 19:01:00
博文:python之面向对象(四)


继续小结py面向对象,关于模块和包。

 

前面“聊聊pythonJavaScript”中提到过,python文件都可以作为模块导入给其他python文件使用,可以直接使用python文件中定义的全局变量和函数,学到对象了,增加了一个可以使用的东西,就是类,即类也可以拿来用!

 

模块是 Python 程序架构的一个核心概念,每一个以扩展名 py 结尾的 Python 源代码文件都是一个模块,模块名同样也是一个标识符,需要符合标识符的命名规则,在模块中定义的全局变量 、函数、类都是提供给外界直接使用的工具,模块就好比是工具包,要想使用这个工具包中的工具,就需要先导入这个模块。

 

导入py文件有两种方式:

1import

import 模块名1

import 模块名2

如果模块的名字太长,可以使用 as 指定模块别名,以方便在代码中的使用,如

import 模块名 as 模块别名

注意:模块别名也应该符合大驼峰命名法

 

2from...import 导入

从某一个模块中,导入部分工具,就可以使用from ... import 的方式

from 模块名 import 工具名

用这种方式导入之后,不需要通过“模块名.”,可以直接使用模块提供的工具 —— 全局变量、函数、类

 

注意,如果两个模块,存在同名的函数,那么后导入模块的函数,会覆盖掉先导入的函数,开发时 import 代码应该统一写在代码的顶部,更容易及时发现冲突,一旦发现冲突,可以使用 as 关键字给其中一个工具起一个别名

 

from...import *

# 从模块导入所有工具(与import 模块名一样导入全部工具,区别在于这种方式导入的工具,不需要用 模块名. 方式调用)。这种方式不推荐使用,因为函数重名并没有任何的提示,出现问题不好排查(说说而已)

 

导入模块要注意的问题:

1py文件要避免与系统的模块重名,如系统有个random模块(随机数模块),如果当前目录存在一个random.py的文件,那就麻烦了,会导入当前目录下的random模块而非系统提供的random模块!

 

Python 中每一个模块都有一个内置属性 __file__ 可以查看模块的完整路径,如

import random

print(random.__file__)


2、每个py文件都可以作为模块被其他py文件导入,还有一个问题,如果一个py文件中,除了定义的全局变量、函数和类以外,还有其他的执行语句(按py的说法,所有的没有缩进的代码,如测试用的代码),那么导入时这些代码会被执行一遍。

 

在实际开发中,每一个模块都是独立开发的,大多都有专人负责,开发人员通常会在模块下方增加一些测试代码,仅在模块内使用,而被导入到其他文件中不需要执行。

 

处理方法:

利用__name__ 属性,__name__ Python 的一个内置属性,记录着一个字符串,如果是被其他文件导入的,__name__ 值为模块名(文件名),如果是当前文件执行 __name__值为 __main__,因此在模块文件中,可:

if __name__ == "__main__":

    # 文件被导入时,下面代码不会被执行!

    ...

 

因此在模块文件中可以在最下方:

def main():

    ...

  

# 根据 __name__ 判断是否执行下方代码

if __name__ == "__main__":

main()

 

关于包package

 

所谓包,也就是一个供导入的文件夹,里面除了模块文件外,需要一个__init__.py文件列出清单,这样可以一次导入多个模块,包(文件夹)的命名和变量一样,

例:

1、新建一个 hm_message 的包(文件夹和__init__.py文件)

2、在目录下,新建两个文件 send_message receive_message

send_message 文件中定义一个 send 函数

def send(text):

            print("正在发送 %s..." % text)

receive_message 文件中定义一个 receive 函数

       def receive():

            return "这是来自 100xx 的短信"

__init__.py 文件中(要在外界使用包中的模块,需要在 __init__.py 中指定对外界提供的模块列表)

# 从 当前目录 导入 模块列表

from . import send_message

from . import receive_message

3、在外部直接导入 hm_message 的包

import hm_message

hm_message.send_message.send("hello")

txt = hm_message.receive_message.receive()

print(txt)

 

最后是关于第3方模块的下载安装、卸载,及自己的模块怎样分享给别人,这块内容比较郁闷,教程是基于linux系统的,只讲了在linux下怎么做。。。

mygod | 阅读全文 | 回复(0) | 引用通告 | 编辑
发表评论:
请稍候,载入中。。。
公告
请稍候,载入中。。。
时间记忆
请稍候,载入中。。。
最新日志
请稍候,载入中。。。
最新评论
请稍候,载入中。。。
最新回复
请稍候,载入中。。。
我的好友
我的相册
站点信息
请稍候,载入中。。。
生活因感动而精彩,理想在创造中放飞
Powered by Oblog.