python面向对象基础(五)

本节将继续讲解剩下的几个比较重要的特殊函数重写~

一. 实现环境管理器

  • 异常相关的语句
  1. try-except  捕获异常,将异常转为正常执行;
  2. try-finally 不改变异常状态;
  3. raise 触发异常,发出错误通知;
  4. assert 根据条件触发'AssertError'
  • with 语句:
  1. 语法:with 表达式1 [as 变量1], 表达式2 [as 变量2], ...:
  2. 作用:用于对资源进行访问的场合,确保使用过程中不管是否发生异常,都会执行必须的'清理'操作,并释放资源。如文件使用后自动关闭,线程中锁的自动获取和释放等;
  3. 说明:
    1. 用as子句中的变量绑定生成的对象;
    2. with语句并不改变异常的状态;
    3. 使用 with 语句进行管理的对象必须是环境管理器(即必须包含__enter__方法和__exit__方法);
"""文件复制"""

src_file = input('请输入原文件:')
dst_file = input('请输入目标文件:')

try:
    with open(src_file, 'rb') as src, \
         open(dst_file, 'wb') as dst:
        while True:
            b = src.read(4096)
            if not b:
                break
            dst.write(b)
except OSError:
    print('复制失败!')

运行结果:

  • 环境管理器(也称为上下文管理器):
  1. 类内有__enter__方法和__exit__实例方法的类被称为环境管理器;
  2. 能够用with语句进行管理的对象必须是环境管理器;
  3. __enter__将在进入with语句时被调用,并返回由as变量绑定的对象;
  4. __exit__将在离开with语句时被调用,且可以用参数来判断在离开with语句时是否有异常发生并做出相应处理

示例:

"""环境管理器类的定义和使用"""


class A:
    """此类的对象可以用with语句进行管理"""
    def __enter__(self):
        """__enter__将在进入with语句时被调用,并返回由as变量绑定的对象"""
        print('进入with语句...')
        return self

    def __exit__(self, exc_type, exc_value, exc_tb):
        """"__exit__将在离开with语句时被调用,且可以用参数来判断在离开with语句时是否有异常发生并做出相应处理"""
        print('离开了with语句...')
        if exc_type is None:
            print('正常离开with,没有发生异常')
        else:
            print('离开with语句时发生异常')
            print("异常类型:", exc_type)
            print('错误的值是', exc_value)


if __name__ == "__main__":
    try:
        with A() as a:
            print('这里是with语句内部...')
            print(3 / 0)  # 即便with语句内出现异常,也会自动调用__exit__方法
    except ZeroDivisionError:
        print('except已捕获异常,并将程序转为正常状态!')
    print('程序退出!')

运行结果:

二. 运算符重载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值