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

posted @ 2019-01-26 17:37  菜白小系瓦  阅读(120)  评论(0编辑  收藏  举报