文档章节

Python 学习笔记 - 面向对象(单例模式和异常处理)

乐搏学院
 乐搏学院
发布于 2017/04/06 15:44
字数 584
阅读 4
收藏 0

单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时, 单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个 全局对象,这样有利于我们协调系统整体的行为。 --以上来自维基百科

 

实现他的方式有很多,比如http://foofish.net/blog/93/python_singleton

 

一个简单的方式是通过一个静态字段进行判断。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

class Foo:

    instance = None

    def __init__(self,name):

        self.name = name

    @classmethod

    def get_instance(cls,name):

        # cls类名

        if cls.instance:

            return cls.instance

        else:

            obj = cls(name)

            cls.instance = obj

            return obj

obj1 = Foo.get_instance('alex')

print(obj1.name)

obj2 = Foo.get_instance('bee')

print(obj2.name)

------------

alex

alex

 

 

第二个要点是异常处理。

一般的基本形式是:

1

2

3

4

try:

    pass

except Exception as ex:

    pass

 

比如说,注意如果要捕获不同的异常,Exception as ex需要写在最后,因为他会把任何所有的异常都放进去。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

while True:

    num1 = input('num1:')

    num2 = input('num2:')

    try:

        li = []

        li[100]

        num1 = int(num1)

        num2 = int(num2)

        result = num1 + num2

    except ValueError as ex:

        print(ex) # str

    except IndexError as ex:

        print(ex) # str

    except Exception as ex:

        print(ex)

 

还有一种表达形式是 try..except..else..finally

 

else表示如果没有错误执行的操作,finally则是所有操作结束之前都需要执行的操作。

wKioL1f0hlST43icAAJKLO2unKk325.png

 

如果想主动执行一个错误,可以通过raise来实现,比如

1

2

3

4

5

6

7

8

9

10

11

12

>>> try:

    raise ValueError('主动错误一下'# self.message = '主动错误一下'

    print(1234)

except ValueError as ex:

    print(ex) # str

except Exception as ex:

    print(ex) # __str__, return self.message

else:

    pass

finally:

    pass

主动错误一下

 

最后看看断言 assert,如果一切正常,那么继续他后面的执行程序,否则抛出一个异常

 

比如

1

2

3

4

5

6

7

8

9

10

>>> a=100

assert a>10

print("Ok")

assert a<40,print("oh wrong")

print("wrong")

Ok

oh wrong

Traceback (most recent call last):

  File "<input>", line 4in <module>

AssertionError

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

 

本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1858820

© 著作权归作者所有

共有 人打赏支持
乐搏学院
粉丝 9
博文 526
码字总数 707467
作品 0
丰台
程序员
私信 提问
《 Head First 》学习笔记:策略模式 (python实现)

学习<head first>,书中是用java 来实现,我用python比较多,所以在这里记下 用python实现的方法 。 书中策略模式的定义 : 策略模式 : 策略模式定义了算法族,分别封装起来,让它们之间可以...

Jbryan
2013/06/13
0
0
写代码也有“套路”-谈谈设计模式

编程教室开了这么久,已经有很多人从完全零基础的小白成为了会写代码的菜鸟程序员,能够自己独立开发程序。不过到此阶段,常常会遇到瓶颈,感觉功能可以实现,但代码看起来有些别扭: 代码中...

crossin
02/22
0
0
python 与设计模式 ——工厂与单例

python 与设计模式 源码地址:[http://git.oschina.net/duoduo3_69/python_design_pattern][1] git checkout v001(这个版本与此篇博客相符) zarkpy里面运用了很多设计模式,以前一直很费解p...

duoduo3_69
2013/11/27
0
0
Head First Design Pattern 读书笔记(1) 策略模式

Head First Design Pattern 读书笔记(1) Strategy Pattern 策略模式 这几天为了锻炼看英语文档的能力,开着有道硬着头皮看 《Head First Desgin Pattern》的原版书,顺便做下笔记,把里面提...

Tek_Eternal
2015/01/02
0
0
深入理解PHP ed3 读书笔记

http://qiniu.daydaygo.top/book/phpvqp3.jpg 很多细节,建议边看边对比 php-manual 数组排序函数对比 匿名函数 lambda print() / sprintf() 等函数 mysql 存储函数:关联特定数据库 面向对象...

daydaygo
2018/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Python中判断字符串是否包含中文

Python import reRE = re.compile(u'[\u4e00-\u9fa5]', re.UNICODE)match = re.search(RE, str)if match is None:# 没有包含中文字符 参考 Python regular expressions return true/f......

亚林瓜子
13分钟前
0
0
《CNCF × Alibaba 云原生技术公开课》正式首播

《CNCF × Alibaba 云原生技术公开课》立即观看:点击立即观看 云原生最初来描述云上应用的典型架构与特性,随着容器、Kubernetes、Serverless、FaaS技术的演进,CNCF(云原生计算基金会)把...

mcy0425
13分钟前
0
0
网站漏洞如何修复网站程序问题

jeecms 最近被爆出高危网站漏洞,可以导致网站被上传webshell木马文件,受影响的版本是jeecms V6.0版本到jeecmsV7.0版本。该网站系统采用的是JAVA语言开发,数据库使用的是oracle,mysql,sql数...

网站安全
16分钟前
1
0
git 中“warning: CRLF will be replaced by LF in”解决方案

https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf-in-git-what-is-that-and-is-it-important...

qwfys
21分钟前
0
0
Spring Boot配置ssl证书启用HTTPS协议

一 、点睛 SSL是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密。SSL协议位于TCP/IP协议和各种应用层协议之间,为数据通信提供安全支持。 SSL协议分为两...

故久呵呵
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部