python的魔法方法
python中的魔法方法是一些可以让你对类添加“魔法”的特殊方法,它们经常是两个下划线包围来命名的,比如 __init__, __call__。魔法方法可以使Python的自由度变得更高,在面向对象方面表现的更好。
python有很多魔法方法,根据其作用和特点,归纳总结为以下几类
1. 基础魔法方法
1.1 __new__
__new__ 是真正的构造函数,在实例化对象时被调用,通常你不会实现这个方法,除非你想对实例的创建进行控制,比如利用__new__ 写一个单例模式,参见文章python实现单例模式的5种方法
1.2 __init__
__init__ 被用于初始化实例对象,__new__方法创建对象后就会调用该方法对实例的属性进行初始化。很多人误以为__init__是构造函数,这是不对的,面试的时候经常拿他们两个做比较。
1.3 __del__
__del__ 是析构方法,当对象的引用计数变为0时,这个对象会被销毁掉,此时就会调用__del__方法
classT:
def__del__(self):
print("对象被销毁")
t = T()
t = 0# t指向0, 此前创建的T的实例被销毁print('ok')
程序输出结果
对象被销毁
ok
当变量t重新赋值为0时,此前创建的T的实例由于引用计数变为了0,对象被销毁,__del__ 被调用,而后执行print('ok')语句。
1.4 __call__
允许一个类的实例像函数一样被调用,这是一个非常重要的特性,与他相关的python概念还有callbale,参见文章python callable概念
下面的示例代码向你展示如何使用__call__
classT:
def__call__(self, *args, **kwargs):
print("类的实例可以像函数一样被调用")
t = T()
t()
1.5 __len__
cl