A24-Python基础之魔法方法

构造器

 __init__(self[,...])

类在实例化的时候自动被调用的方法。

__new__(cls[,...])

在类的实例化之前调用,根据需要可重写。

析构器

__del__(self)

当对象被销毁(Python的垃圾回收机制)时,该方法被调用。

算数运算

方法 解释
__add__(self,other) 定义加法的行为:+
__sub__(self,other) 定义减法的行为:-
__mul__(self,other) 定义乘法的行为:*
__truediv__(self,other) 定义真除法的行为:/
__floordiv__(self,other) 定义整数除法的行为://
__mod__(self,other) 定义取模算法的行为:%
__pow__(self,other[,modulo]) 定义power()调用或者**运算时的行为
__lshift__(self,other) 定义按位左移位的行为:<<
__rshift__(self,other) 定义按位右移位的行为:>>
__and__(self,other) 定义按位与操作的行为:&
__xor__(self,other) 定义按位异或操作的行为:^
__or__(self,other) 定义按位或操作的行为:|

反运算

方法 解释
__radd__(self,other) 与上方相同,当左操作数不支持相应操作时被调用
__rsub__(self,other) 与上方相同,当左操作数不支持相应操作时被调用
__rmul__(self,other) 与上方相同,当左操作数不支持相应操作时被调用
__rtruediv__(self,other) 与上方相同,当左操作数不支持相应操作时被调用
__rfloordiv__(self,other) 与上方相同,当左操作数不支持相应操作时被调用
__rmod__(self,other) 与上方相同,当左操作数不支持相应操作时被调用
__rpow__(self,other[,modulo]) 与上方相同,当左操作数不支持相应操作时被调用
__rlshift__(self,other) 与上方相同,当左操作数不支持相应操作时被调用
__rrshift__(self,other) 与上方相同,当左操作数不支持相应操作时被调用
__rand__(self,other) 与上方相同,当左操作数不支持相应操作时被调用
__rxor__(self,other) 与上方相同,当左操作数不支持相应操作时被调用
__ror__(self,other) 与上方相同,当左操作数不支持相应操作时被调用

其它

增量赋值运算、一元操作符、类型转换都有相应方法

属性访问

方法 解释
__getattr__(self,name) 定义当用户试图获取不存在的属性时的行为
__getattribute__(self,name) 定义当该类的属性被访问时的行为
__setattr__(self,name,value) 定义当一个属性被设置时的行为
__delattr__(self,name) 定义当一个属性被删除时的行为

描述符

描述符就是将某种特殊类型的类的实例指派给另一个类的属性。
特殊类型的类至少实现以下一个方法:

__get__(self,instance,owner) #用于访问属性,返回属性的值
__set__(self,instance,value) #在属性分配操作中调用,不返回任何内容
__delete__(self,instance) #控制删除操作,不返回任何内容

定制序列

协议:与其它编程语言中的接口很相似。它规定哪些方法必须要定义。在Python中,协议更像是一种指南。

容器类型的协议:
如果希望定制的容器是不可变的话,只需要定义__len__()__getitem__()方法。
如果希望定制的容器可变的话,除了__len__()__getitem__()方法,还需要定义__setitem__()__delitem__()两个方法。

迭代器

提供迭代方法的容器称为迭代器,迭代类似于循环,这次循环的结果作为下次的初始条件。可迭代对象:列表、元组、字符串、字典。
输入:

str = "hello"
for i in str:
    print(i)

输出:

h
e
l
l
o

一个容器对象调用iter()得到他的迭代器,调用next()迭代器就会返回下一个值,如果没有值可返回了,就会抛出一个异常。同时,可重写__iter__()__next__()两个魔法方法。

生成器

协同程序:可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或者重新开始。
一个带有yield的函数就是一个generator生成器【也是一种迭代器】。yield语句相当于一个会暂停的return语句。
输入:

def num():
    a = 1
    while True:
        a += a
        yield a
for i in num():
    if i > 200:
        break
    print(i,end = " ")

输出:

2 4 8 16 32 64 128 

欢迎指正!懵

你可能感兴趣的:(A-Python基础,python,生成器,编程语言)