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

本文介绍了单例模式的概念及其实现方式,并提供了一个通过静态字段判断实例存在的示例。此外,还详细讲解了异常处理的基本形式,包括不同类型的异常捕获及主动触发异常的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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

转载于:https://my.oschina.net/learnbo/blog/874146

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值