前言
如果你使用Python并使用面向对象编程,一定会经常见特殊方法,最常见的特殊方法是__init__,特殊方法最大的特点是它会被Python解释器自动调用,接下来认真学习一下(当然所有的特殊方法当然是定义在类中的)
什么是特殊方法?
特殊方法是定义在类中的实例方法,因为支持自动调用,所以称为特殊方法!
别称1:魔法方法
别称2:内置方法
英文名:Magic Method
特点:所有的特殊方法均会在某个特定操作时被Python解释器自动调用
注意:特殊方法支持手动调用
特殊方法的语法特点
def __init__(self, *args, **kw):
pass
特殊方法名称前与名称后,均有2个下划线
举例说明
1、创建一个对象后,__init__方法会被自动调用,__init__是特殊方法
2、使用with 语句时,对象的__enter__方法、__exit__方法会被自动调用
这些__xx__的方法,都称为特殊方法
重写特殊方法,加入自己的业务逻辑
1、特殊方法__init__方法
实例对象创建后,会自动调用__init__方法,所以我们常常会重写该方法加入自己的业务逻辑
2、特殊方法__new__
类通过调用静态方法__new__用于创建实例对象,我们可以重写__new__实现单例类
常见特殊方法
1、__init__
创建对象后,第一个被调用的方法,被称为初始化方法
2、__new__
类用于创建对象的方法
3、__del__
对象被销毁时会被调用
4、__enter__与__exit__
with语句回调的方法
5、__setattr__
当你为实例对象设置一个实例变量的时候,这个特殊方法就会被调用
6、 __eq__
self == other,即两个对象进行对比的时候,该方法会被调用
7、 __cmp__(Python3已废弃)
用于对象之间对比时调用
规则:__cmp__ 是 self < other 时返回一个负整数,在 self == other 时返回0,在 self > other 时返回正整数
取而代之的是下面几个魔法方法(shell里面也是这个……)
__eq__`(self, other) 定义等于操作符(==)的行为。
__ne__(self, other) 定义不等于操作符(!=)的行为。
__lt__(self, other) 定义小于操作符(<)的行为。
__gt__(self, other) 定义大于操作符(>)的行为。
__le__(self, other) 定义小于等于操作符(<)的行为。
__ge__(self, other) 定义大于等于操作符(>)的行为
8、还有很多特殊方法…………等待你去发现与使用
9、__hash__
只有定义此方法的对象,才能作为哈希容器中的Key对象