视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python中四个魔术方法的详细介绍
2020-11-27 14:25:32 责编:小采
文档


Python的魔术方法一般以methodname的形式命名,如:init(构造方法), getitem、 setitem(subscriptable所需method), delitem(del obj[key]所需method), len(len(…)所需method)等。

在Python中,如果我们想实现创建类似于序列和映射的类,可以通过重写魔法方法getitem、setitem、delitem、len方法去模拟。

魔术方法的作用:

getitem(self,key):返回键对应的值。

setitem(self,key,value):设置给定键的值

delitem(self,key):删除给定键对应的元素。

len():返回元素的数量

代码实例:

# coding:utf-8
'''
 desc:尝试定义一种新的数据类型
 等差数列
 author:pythontab.com
'''
class ArithemeticSequence(object):
 def init(self,start=0,step=1):
 print 'Call function init'
 self.start=start
 self.step=step
 self.myData={}
 # 定义获取值的方法
 def getitem(self,key):
 print 'Call function getitem'
 try:
 return self.myData[key]
 except KeyError:
 return self.start+key*self.step
 # 定义赋值方法
 def setitem(self,key,value):
 print 'Call function setitem'
 self.myData[key]=value
 # 定义获取长度的方法
 def len(self):
 print 'Call function len'
 # 这里为了可以看出len的作用, 我们故意把length增加1
 return len(self.myData) + 1
 # 定义删除元素的方法
 def delitem(self, key):
 print 'Call function delitem'
 del self.myData[key]
 
s=ArithemeticSequence(1,2)
print s[3] # 这里应该执行self.start+key*self.step,因为没有3这个key
s[3] = 100 # 进行赋值
print s[3] # 前面进行了赋值,那么直接
输出赋的值100 print len(s) # 我们故意多加了1,应该返回2 del s[3] # 删除3这个key print s[3] # 这里应该执行self.start+key*self.step,因为3这个key被删了

输出结果:

Call function init
Call function getitem
7
Call function setitem
Call function getitem
100
Call function len
2
Call function delitem
Call function getitem
7

这些魔术方法的原理就是:当我们对类的属性item进行下标的操作时,首先会被getitem()、setitem()、delitem()拦截,从而进行我们在方法中设定的操作,如赋值,修改内容,删除内容等等。

【相关推荐】

1. 深入了解python中的特殊函数 __len__(self)

2. 必须掌握的小知识--Python len实例详解

3. 总结Python中len()函数的使用实例

4. python专用类方法使用的实例教程

下载本文
显示全文
专题