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)魔法方法进行计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值