04单例、异常、模块、包
一. 单例
1. 目的
让类创建的对象,在系统中只有唯一的一个实例;每一次执行类名()返回的对象,内存地址是相同的
2. __new__方法
1) 使用类名()创建对象时,python解释器会首先调用__new__方法
2) 在内存中为对象分配空间,返回对象的引用
3) 重写时,需要为对象分配控件,并且返回对象的引用
def __new__(cls,*args,**kwargs)
instance=super().__new__(cls)
return instance
3. 实现
1) 定义一个类属性,初始值是None
2) 重写__new__方法
3) 如果类属性is None,调用父类的方法分配空间,并在类属性中记录结果
4) 返回类属性中记录的对象引用
二. 异常
1. 捕获异常
try:
尝试执行的代码
except:
出现错误的处理
2. 捕获未知错误
except Exception as result:
print(“未知错误 %s ” % result)
3. 完整语法
利用异常的传递性,在主程序捕获异常
4. 抛出raise异常
主动抛出异常
1) 创建一个Exception对象
2) 使用raise关键字抛出异常对象
三. 模块
1. 导入部分工具
1)from 模块名import 某一个工具
2)不需要通过模块名.来调用,可以直接调用
3)如果两个模块,存在同名的函数,那么后导入模块的函数,会覆盖掉先导入的函数
4)一旦发现冲突,可以使用as关键字给其中一个工具起一个别名
5) from…import *
导入所有工具,不需要使用模块名.就可以调用
开发时不推荐使用,当函数重名难以排查
2. __name__
将测试代码只在测试情况下被运行,而在被导入时不会被执行
四. 包
1. 概念
2. 好处
使用Import 包名可以一次性导入多个模块
3. __init__.py
要在外界使用包中的模块,需要在__init__.py中指定对外界提供的模块列表
4. 发布模块
1) 创建 setup.py
setup.py 的文件
from distutils.core import setup
setup(name="hm_message", # 包名
version="1.0", # 版本
description="itheima's 发送和接收消息模块", # 描述信息
long_description="完整的发送和接收消息模块", # 完整描述信息
author="itheima", # 作者
author_email="itheima@itheima.com", # 作者邮箱
url="www.itheima.com", # 主页
py_modules=["hm_message.send_message",
"hm_message.receive_message"])
有关字典参数的详细信息,可以参阅官方网站:
https://docs.python.org/2/distutils/apiref.html
2) 构建模块
$ python3 setup.py build
3) 生成发布压缩包
$ python3 setup.py sdist
5. 安装模块
tar -zxvf 包名.tar.gz
sudo python3 setup.py install