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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

余二五 2017-11-14 12:42:00 浏览899
展开阅读全文

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


实现他的方式有很多,比如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






本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1858820,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
余二五
+ 关注