文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式
2016-07-02 09:43
746 查看
本节主要内容:
1.面向对象中的成员
2.成员修饰符
3.特殊成员
4.异常处理
5.设计模式之单例模式
更多异常种类
应用实例:
程序依然回直接报错,达不到想要的效果如下:
关于如上的内容应该改如何操作呢,有一种笨的方法如就是捕获多种类型的err,
但是这种方法非常笨拙,而且很难写全面,其实python中有一个万能异常Exception,他能捕获各种异常
那么既然后万能异常其它异常存在的意义是什么呢?
万能异常时这样使用的:对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行。如下:
语法简单如下:
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并提供全局访问点。
下面用pytho代码来实现一个单例模式
1.面向对象中的成员
2.成员修饰符
3.特殊成员
4.异常处理
5.设计模式之单例模式
一.面向对象中的成员(类的成员)
类的成员总共可以分为3大类,每类中有不同的分支。1.总述,基本分类
如下图所示: 类成员包括字段,方法,和属性ArithmeticError AssertionError AttributeError BaseException BufferError BytesWarning DeprecationWarning EnvironmentError EOFError Exception FloatingPointError FutureWarning GeneratorExit ImportError ImportWarning IndentationError IndexError IOError KeyboardInterrupt KeyError LookupError MemoryError NameError NotImplementedError OSError OverflowError PendingDeprecationWarning ReferenceError RuntimeError RuntimeWarning StandardError StopIteration SyntaxError SyntaxWarning SystemError SystemExit TabError TypeError UnboundLocalError UnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateError UnicodeWarning UserWarning ValueError Warning ZeroDivisionError 更多异常
更多异常种类
应用实例:
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
dic = ["zhaowencheng", 'wangmeimei'] try: dic[10] except IndexError as ex: print(ex) #显示如下: list index out of range Process finished with exit code 0
KeyError 试图访问字典里不存在的键
dic = {"aaa":"111", "bbb":"222"} try: dic["ccc"] except KeyError as ex: print(ex)
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
s1 = 'hello' try: int(s1) except ValueError, e: print e ###显示 invalid literal for int() with base 10: 'hello' Process finished with exit code 0
2.进阶异常处理:
对于上面叙述的所有例中,所有的异常处理只能处理指定的异常,如KeyError只能捕捉访问字典中不存在的key时的异常,却无法捕捉ValueError的类型的异常。当捕获不到对应的异常时程序依然回直接报错,达不到想要的效果如下:
s1 = 'hello' try: int(s1) except KeyError as e: print(e) #由于未能捕获到正确的err程序依然回直接报错,显示如下: Traceback (most recent call last): File "/Users/wenchengzhao/PycharmProjects/s13/day8/temp.py", line 328, in <module> int(s1) ValueError: invalid literal for int() with base 10: 'hello' Process finished with exit code 1
关于如上的内容应该改如何操作呢,有一种笨的方法如就是捕获多种类型的err,
s1 = 'hello' try: int(s1) except KeyError as e: print(e) except ValueError as e: print(e) except IndexError as e: print(e) . . . #写上更多的 err 类型。
但是这种方法非常笨拙,而且很难写全面,其实python中有一个万能异常Exception,他能捕获各种异常
s1 = 'hello' try: int(s1) except Exception as e: print(e) ##显示如下 invalid literal for int() with base 10: 'hello' Process finished with exit code 0
那么既然后万能异常其它异常存在的意义是什么呢?
万能异常时这样使用的:对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行。如下:
s1 = 'hello' try: int(s1) except KeyError as e: print ("键错误") except IndexError as e: print ('索引错误') except Exception as e: print ('错误')
3.其它异常结构
try: # 主代码块 pass except KeyError,e: # 异常时,执行该块 pass else: # 主代码块执行完,执行该块 pass finally: # 无论异常与否,最终执行该块 pass
执行顺序:
4.主动触发异常
try: raise Exception('错误了。。。(wencheng)') except Exception as e: print (e) #显示如下: 错误了。。。(wencheng) Process finished with exit code 0
5.自定义异常
class ZhaowenchengException(Exception): def __init__(self, msg): self.message = msg def __str__(self): return self.message try: raise ZhaowenchengException('我的异常') except ZhaowenchengException as e: print(e) #显示如下 我的异常 Process finished with exit code 0
6断言
python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。语法简单如下:
# assert 条件 assert 1 == 1 assert 1 == 2
五.设计模式之 ---- 单例模式
简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个(当然也可以不存在)。单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并提供全局访问点。
下面用pytho代码来实现一个单例模式
class Foo: instance = None #标示用于判断实例是否存在 def __init__(self,name): #构造方法 self.name = name @classmethod #类方法 def get_instance(cls): #将类名作为参数传递进来 if cls.instance: #判断实例是否存在 return cls.instance #如果存在直接返回,不在创建,确保单实例 else: obj = cls() cls.instance = obj return obj #返回对象
相关文章推荐
- Python startswith()方法
- python类及其方法
- python下划线
- python中带下划线的变量和函数
- 5.7 Python字典
- 5.6 Python元组
- 5.5 Python列表
- 5.4 Python字符串格式化
- 5.3 Python字符串深入探讨
- 5.2 Python序列的操作
- 5.1 Python序列
- Python程序-生成回文
- Python 语言及其应用 Chapter_4_Note_2 函数_参数_
- Python中lambda用法
- python中的map、filter、reduce函数
- Python 语言及其应用 Chapter_4_Note_2 函数_参数_
- python str的一些方法
- Python中的join()函数的用法
- Python命令行工具集——pycli
- Python中的复制操作及copy模块中的浅拷贝与深拷贝方法