什么是魔法方法?
在Python中,有的方法的前后被双下划线所包围,这就是魔法方法,这些方法会在特殊的情况下被调用,而不用显示调用。
其中,Python中最常见的魔法方法便是构造方法_init_,同样的,构造方法也不用显示调用,当你创建一个对象时,程序会自动调用构造方法。
class test:
def __init__(self,value=1):
self.tag=value
>>>t=test(5)
>>>t.tag
5
可以看到,当创建一个对象时,会自动执行构造函数内的代码。
除了构造函数之外,还有另外一些常见的魔法方法,可以创建类似于序列或映射的对象。
魔法方法 | 含义 |
---|---|
_len_(self) | 这个方法会返回集合中所含项目的数量,比如,序列中元素个数或键值对的数量,当返回0时,对象被当作布尔变量中的假值 |
_getitem_(self,key) | 返回与所给键对应的值 |
_setitem_(self,key,value) | 按照一定的方式存储和key相关的value |
_delitem_(self,key) | 该方法在对一部分对象使用del语句时被调用,同时删除相关的键 |
下面实现一个无穷序列。
def checkIndex(key):
if not isinstance(key,(int,long)):raise TypeError
if key<0: raise IndexError
class ArithmeticsSequence:
def __init__(self,start=0,step=1):
self.start=start
self.step=step
self.changed={}
def __getitem__(self,key):
checkIndex(key)
try:
return self.changed[key]
except KeyError:
return self.start+key*self.step
def __setitem__(self,key,value):
checkIndex(key)
self.changed[key]=value
>>>s=ArithmeticsSequence(1,2)
>>>s[4]
9
>>>s[4]=2
>>>s[4]
2
可以看到,当需要key为4时所对应的值时,它自动会动用_getitem_(self,key)魔法方法进行计算。