1.魔法方法
魔法方法总是被双下划线包围,比如__init__
魔法方法相当强大,面向对象的python的一切,总能在适当的时候被自动调用。
第一个参数应为cls或者self
注:cls:类方法,代表一个类的名称
self:实例方法,代表一个实例对象的名称
(1)基本的魔法方法
如__init__(self[, …])构造器,当一个实例被创建时调用的初始化方法
如__new__(cls[, …])在一个对象实例化的时候所调用的第一个方法。
在调用__init__初始化前,先调用__new__.
注:如果__new__没有正确返回当前类cls的实例,那__init__是不会被调用的。
下面看一个利用__new__实现单例模式。
如__new__方法主要是当你继承一些不可变的class时,如int,str,tuple等,提供给你一个自定义这些类的实例化过程的途径。
如__del__(self) 析构器,当一个对象将要被系统回收时调用的方法。
如__str__(self):
当①打印一个对象时;②使用%s格式化:③str强转数据类型时(出现如上某种情况),会触发__str__。
如__repr__(self):
当有__str__存在时,执行__str__;当没有__str__存在时,执行__repr__。
当使用%r格式化时,触发__repr__。
如__str__(self)的返回结果可读性强。得到便于人阅读的信息。
如__repr__(self)的返回结果更准确。目的在于调试,便于开发者使用。
(2)算术运算符
类型工厂函数,指的是不通过类而是通过函数来创建对象。
如__add__(self, other)定义加法的行为:+
如__sub__(self, other)定义加法的行为:-
如__mul__(self, other)定义乘法的行为:*
如__truediv__(self, other)定义真除法的行为:/
如__floordiv__(self, other)定义整数除法的行为://
如__mod__(self, other)定义取模算法的行为:%
如__divmod__(self, other)定义当被divmod()调用时地行为
divmod(a, b) 把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a//b, a%b)
print(divmod(7, 2)) #(3, 1)
print(divmod(8, 2)) #(4, 0)
(3)反算术运算符
反运算魔方方法,与算术运算符保持一一对应,不同之处多了一个“r”。
来个例子:
(4)增量赋值运算
(5)一元运算符
(6)属性访问
例子:
(7)描述符
将某种特殊类型的类的实例指派给另一个类的属性。
(8)定制序列
(9)迭代器