Python Task 11:魔法方法

  • 魔方方法或者又称为特殊方法,是指被包含下划线的方法或者所能调用到的方法的统称,这些通常会在特殊的情况下调用,并且基本没有手动调用他们的必要。

1.构造方法

  • 构造方法就是类似于init的初始化方法,差别在于一个对象被构建好以后会自动调用构造方法。
    Python Task 11:魔法方法
    2.算术运算
算术运算符 描述
add(self, other) 定义加法的行为:+
sub(self, other) 定义减法的行为:-
mul(self, other) 定义乘法的行为:*
truediv(self, other) 定义真除法的行为:/
floordiv(self, other) 定义整数除法的行为://
mod(self, other) 定义取模算法的行为:%
divmod(self, other) 定义当被 divmod() 调用时的行为
pow(self, other[, modulo]) 定义当被 power() 调用或 ** 运算时的行为
lshift(self, other) 定义按位左移位的行为:<<
rshift(self, other) 定义按位右移位的行为:>>
and(self, other) 定义按位与操作的行为:&
xor(self, other) 定义按位异或操作的行为:^
or(self, other) 定义按位或操作的行为:l

Python Task 11:魔法方法

反运算 描述
radd(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
rsub(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
rmul(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
rtruediv(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
rfloordiv(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
rmod(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
rdivmod(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
rpow(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
rlshift(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
rrshift(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
rxor(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
ror(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用

Python Task 11:魔法方法
3.简单定制
Python Task 11:魔法方法
4.属性访问

语句 描述
getattr(self, name) 定义当用户试图获取一个不存在的属性时的行为。
getattribute(self, name) 定义当该类的属性被访问时的行为(先调用该方法,查看是否存在该属性,若不存在,接着去调用__getattr__)
setattr(self, name, value) 定义当一个属性被设置时的行为。
delattr(self, name) 定义当一个属性被删除时的行为。

Python Task 11:魔法方法
5.描述符

  • 描述符就是将某种特殊类型的类的实例指派给另一个类的属性。
语句 描述
get(self, instance, owner) 用于访问属性,它返回属性的值。
set(self, instance, value) 将在属性分配操作中调用,不返回任何内容。
del(self, instance) 控制删除操作,不返回任何内容。

Python Task 11:魔法方法
6.定制序列

  • 如果说你希望定制的容器是不可变的话,你只需要定义__len__()和__getitem()__方法。
  • 如果你希望定制的容器是可变的话,除了__len__()和__getitem__()方法,你还需要定义__setitem__()和__delitem()__两个方法。
    Python Task 11:魔法方法
  • len(self)定义当被len()调用时的行为(返回容器中元素的个数)。
  • getitem(self, key)定义获取容器中元素的行为,相当于self[key]。
  • setitem(self, key, value)定义设置容器中指定元素的行为,相当于self[key] = value。
  • delitem(self, key)定义删除容器中指定元素的行为,相当于del self[key]。

7.迭代器

  • 迭代是 Python 最强大的功能之一,是访问集合元素的一种方式。

  • 迭代器是一个可以记住遍历的位置的对象。

  • 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。

  • 迭代器只能往前不会后退。

  • 字符串,列表或元组对象都可用于创建迭代器
    Python Task 11:魔法方法

  • 迭代器有两个基本的方法:iter() 和 next()。

语句 描述
iter(object) 函数 用来生成迭代器
next(iterator[, default]) 返回迭代器的下一个项目
iterator 可迭代对象
default 可选,用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发 StopIteration 异常

Python Task 11:魔法方法
把一个类作为一个迭代器使用需要在类中实现两个魔法方法 iter() 与 next() 。

  • iter(self)定义当迭代容器中的元素的行为,返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next()__方法并通过 StopIteration 异常标识迭代的完成。
  • next() 返回下一个迭代器对象。
  • StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next()__方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。

8.生成器

  • 在 Python 中,使用了 yield 的函数被称为生成器(generator)。
  • 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
  • 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行
    next() 方法时从当前位置继续运行。
  • 调用一个生成器函数,返回的是一个迭代器对象。
    Python Task 11:魔法方法
    9.推导式
  • 列表推导式
    Python Task 11:魔法方法
  • 字典推导式
    Python Task 11:魔法方法
  • 集合推导式
    Python Task 11:魔法方法
    10.增量赋值运算符
语句 描述
iadd(self, other) 定义赋值加法的行为:+=
isub(self, other) 定义赋值减法的行为:-=
imul(self, other) 定义赋值乘法的行为:*=
itruediv(self, other) 定义赋值真除法的行为:/=
ifloordiv(self, other) 定义赋值整数除法的行为://=
imod(self, other) 定义赋值取模算法的行为:%=
ipow(self, other[, modulo]) 定义赋值幂运算的行为:**=
ilshift(self, other) 定义赋值按位左移位的行为:<<=
irshift(self, other) 定义赋值按位右移位的行为:>>=
iand(self, other) 定义赋值按位与操作的行为:&=
ixor(self, other) 定义赋值按位异或操作的行为:^=
ior(self, other) 定义赋值按位或操作的行为:

11.一元操作符

语句 描述
neg(self) 定义正号的行为:+x
pos(self) 定义负号的行为:-x
abs(self) 定义当被 abs() 调用时的行为
invert(self) 定义按位求反的行为:~x

12.类型转换

语句 描述
complex(self) 定义当被 complex() 调用时的行为(需要返回恰当的值)
int(self) 定义当被 int() 调用时的行为(需要返回恰当的值)
float(self) 定义当被 float() 调用时的行为(需要返回恰当的值)
round(self[, n]) 定义当被 round() 调用时的行为(需要返回恰当的值)
index(self) 1. 当对象是被应用在切片表达式中时,实现整形强制转换 2.如果你定义了一个可能在切片时用到的定制的数值型,你应该定义 index 3.如果 index 被定义,则 int 也需要被定义,且返回相同的值

参考来源:
https://blog.csdn.net/qq_38520096/article/details/79237593
https://mp.weixin.qq.com/s/y5cTjzMHqS4xMEUrUEiV_g
https://www.jianshu.com/p/d5d79762ce7e

相关文章: