Python 面向对象6 - 单例模式、异常

1.单例模式:

  对于一个JDBC的连接池而言,如果来了一个用户,我们不需要重新创建一个连接池,只需要使用连接池里面的一个线程而已,因此在这种情况下,不需要重新创建一个新的对象,而只需要使用这个原有的对象。这种叫做单例模式。

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(‘Alex‘)
            cls.INSTANCE = obj
            return obj

obj1 = Foo.get_instance()
print (obj1)
obj2 = Foo.get_instance()
print (obj2)

返回结果:

<__main__.Foo object at 0x0147F8F0>
<__main__.Foo object at 0x0147F8F0>

#两个相同的内存地址

2.异常处理

  try,except的完整代码块,如果try执行报错,执行exception,然后跳转到finally;如果try执行没有报错,跳转到else,最后执行finally

# try:
#     pass
# except IOError as ex:
#     print (ex)
# except ValueError as ex:
#     print (ex)
# except IndexError as ex:
#     print (ex)
# else:
#     pass
# finally:
#     pass

try:
    i = 123.0
    int(i)
except IOError as ex:
    print (ex)
except ValueError as ex:
    print (ex)
except IndexError as ex:
    print (ex)
else:
    print (1234)
finally:
    print (4567)

主动抛出异常

try:
    raise Exception("我的主动异常")
    i = 123.0
    int(i)
except IOError as ex:
    print (ex)
except ValueError as ex:
    print (ex)
except IndexError as ex:
    print (ex)
except Exception as ex:
    print (ex)
else:
    print (1234)
finally:
    print (4567)

自定义异常:

class MyException(Exception):
    def __init__(self,msg):
        self.message = msg

    def __str__(self):
        return self.message + "ERROR"

myex = MyException("我的异常")

try:
    raise MyException("我的异常")
except Exception as e:
    print (e)

  

时间: 2024-10-04 09:51:52

Python 面向对象6 - 单例模式、异常的相关文章

python——面向对象篇之异常和反射

内置函数isinstance和issubclass 1.1 isinstance用法: 1 isinstance(string,str) 判断第一个参数是否是第二个参数的子集,例如: 1 print isinstance("test",str) #判断test是否是字符串类型 2 3 C:\Python27\python.exe D:/python/s11/8day/反射/test.py 4 5 True 6 7 8 print isinstance(123,int) #判断123是否

Python面向对象之单例模式

单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某 一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就 能派上用场. 单例类:如果一个类,从头到尾只开辟了一块属于对象的空间,那么这个类就是一个单例类. 准备工作: ----#__init__()方法叫初始化方法 ----#__new__()方法叫构造方法 例子: <1> class A: def __new__(cls, *args, **kwargs): print

Python面向对象-day07

写在前面 上课第七天,打卡: 时间的高效利用: 前言: 今天egon老师补充了下 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一.面向过程和面向对象 - 1.面向过程 核心是过程,过程就是解决问题的步骤:流水线.机械式: 优点:复杂的问题简单化,分成多个功能单元: 缺点:可扩展性差 应用:Linux内核.httpd.git - 2.面向对象 核心是对象: 要理解对象,应该把自己当做上帝,在上帝眼里一切存在的事物都是对象,不存在的也可以创建出来: 对象是 特征(变量)和

python 面向对象和类成员和异常处理

python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial diameter),极直径(polar diameter)''' def __init__(self,name,eqDiameter,poDiameter): self.name=name self.eqDiameter=eqDiameter #赤道直径 self.poDiameter=poDiamet

Python 面向对象(下)

本篇博客承接自Python 面向对象(上) 四. 继承,实现,依赖,关联,聚合,组合 待补充 参考资料: https://www.cnblogs.com/chinxi/p/7349768.html 五. 特殊成员 待补充 参考资料: 类中的特殊成员方法 待补充 参考资料: https://www.cnblogs.com/chinxi/p/7349768.html 五. 特殊成员 待补充 参考资料: 类中的特殊成员方法 六. issubclass,type,isinstence各自的用法和区别 1

Python面向对象之:三大特性:继承,封装,多态。

前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到?个对象中. 把固定功能的代码封装到?个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 比如. 你写了?个很?B的函数. 那这个也可以被称为封装. 在?向对象思想中. 是把?些看似?关紧要的内容组合到?起统?进?存储和使?. 这就是封装. 2. 继承: ?类可以?动拥有?类中除了私有属性外的其他所有内容. 说?了, ??可以随便?爹的东?. 但是朋友们, ?定要认清楚?个

Python面向对象之反射,双下方法

一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩. python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) class Foo:    f = '

python面向对象编程进阶

python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Foo(object): 2 pass 3 4 obj = Foo() 5 6 isinstance(obj, Foo) issubclass(sub, super)检查sub类是否是 super 类的派生类 1 class Foo(object): 2 pass 3 4 class B

python面向对象07/异常处理

目录 python面向对象07/异常处理 1.异常错误分类 2.什么是异常? 3.异常处理 4.为什么要有异常处理? 5.异常处理的两种方式 5.1 if判断 5.2 try python面向对象07/异常处理 1.异常错误分类 语法错误: # if 2 > 1 # print(222) # # dic = {'name'; 'alex'} # tu = (2, 3, 4'' 6 ) 逻辑错误: # num = int(input('请输入数字')) # dic = {'name': '海狗',