Python学习之魔法方法

什么是魔法方法?
在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)魔法方法进行计算。

猜你喜欢

转载自blog.csdn.net/dxk_093812/article/details/79699080