Python基础-DAY19

内建函数重载

  __abs__    abs(obj) 函数调用

  __len__    len(obj) 函数调用

  __reversed__  reversed(obj) 函数调用

  __round__     round(obj) 函数调用

 

数值转换函数重载:

  __int__   int(obj)

  __float__  float(obj)

  __complex__  complex(obj)

  __bool__     bool(obj)

 

布尔测试运算符重载

格式:

  def __bool__(self):

       ...

作用:

  1) 用于bool(obj) 函数取值

  2) 用于if语句真值表达式中

  3) 用于while语句真值表达式中

 

重载说明:

  当没有__bool__(self)方法时,真值测试将取 __len__(self) 方法的返回值来测试布尔值

 

in /not in 运算符重载

格式:

  def __contains__(self, e):

      ...

作用:

  成员资格测试(通常返回值为布尔值)

 

 

索引的切片运算符的重载

重载方法:

    __getitem__(self, i) 方法

    __setitem__(self, i, v) 方法

    __delitem__(self, i) 方法

 

作用:

    让自定义类型的对象能进行索引和切片操作

 

示例:

    class MyList:

        def __init__(self, begin, end):

            self.data = [x for x in range(begin, end)]

 

    L1 = MyList(1, 10)

    print(L1[0])

 

 

切片 (slice) 重载

  切片重载同索引重载共用相同的方法

    __getitem__(self, i)   切片取值

    __setitem__(self, i, v) 切片赋值

    __delitem__(self, i)    del删除切片

 

 

属性的管理重载:

  __getattr__(self, name)  根据名字获取属性

  __setattr__(self, name, value)  设置对象的属性和相应的值

  __delattr__(self, name)

 

作用:

  在现有属性上添加一些属性.

 

__getattr__方法会在没有此属性调用,可以返回名字所对应的值,如果确定不需要此属性时,可以引发AttributeError错误!

 

__setattr__方法会在对属性赋值前被调用,通常用来个性化设置相应的属性。

 

迭代器(终极)

什么是迭代器?

  可以通过next函数取值的对象就是迭代器

 

next函数的重载方法:

  def __next__(self):

作用:

  用来实现迭代器协议

 

迭代器协议是指对象能够使用next函数获取下一项数据,在没有下一项数据时触发一个StopIteration异常来终止迭代的约定

 

 

什么是可迭代对象

  可迭代对象是指能用iter(obj)函数返回迭代器的对象(实例)

  注:可迭代对象内部需要定义 __iter__(self) 方法来返回迭代器对象

 

 

异常

with语句

  语法:

    with 表达式 [as 变量], [表达式2 [as 变量2]], ...:

        语句

  说明:

    as子句可以省略,as子句中的变量用于绑定处理对象

    with 语句并不改变异常的状态

  作用:

    使用于对资源进行访问的场合,确保使用过程是不管是否发生异常,都会执行必要的"清理"操作,并释放资源;

      如:文件使用后自动关闭,线程中锁的自动获取和释放等

 

环境管理器

  类内有__enter__ 和 __exit__方法的类被称为环境管理器

 

  能够用with进行管理的对象必须是环境管理器

  __enter__ 方法将在进入with语句时被调用返回由as变量管理的对象

  __exit__ 方法将在离开with语句时被调用,且可以用参数来判断离开with语句时是否有异常发生并做出相应的处理

 

猜你喜欢

转载自blog.csdn.net/qq_41797451/article/details/81568767