在Python中,如果我们想实现创建类似于序列和映射的类(可以迭代以及通过[下标]返回元素),可以通过重写魔法方法 __getitem__、__setitem__、__delitem__、__len__ 方法去模拟。
网站建设、做网站介绍好的网站是理念、设计和技术的结合。成都创新互联公司拥有的网站设计理念、多方位的设计风格、经验丰富的设计团队。提供PC端+手机端网站建设,用营销思维进行网站设计、采用先进技术开源代码、注重用户体验与SEO基础,将技术与创意整合到网站之中,以契合客户的方式做到创意性的视觉化效果。
__getitem__(self,key): 返回键对应的值。
__setitem__(self,key,value): 设置给定键的值
__delitem__(self,key): 删除给定键对应的元素。
__len__(): 返回元素的数量
【注释】只要实现了 __getitem__ 和 __len__ 方法,就会被认为是序列。
这些魔术方法的原理就是:当我们对类的属性item进行下标的操作时,首先会被 __getitem__()、__setitem__()、__delitem__() 拦截,从而执行我们在方法中设定的操作,如赋值,修改内容,删除内容等等。
这个方法应该以与键相关联的方式存储值,以便之后能够使用 __setitem__ 来获取。当然,这个对象可变时才需要实现这个方法。
举个栗子:
定义一副扑克牌(不包括大小王),对牌进行洗牌,然后发牌。
Output:
【注意】 :我们会发现output中,输出了: slice(1, 3, None) ,下面给出解释。
语法:
参数说明:
slice() 函数实现切片对象,主要用在切片操作函数里的参数传递。
举两个栗子来看看:
Output:
切片原理
output
(程序员必会的 hhhhh.....)
看看slice在python3.7中是怎么描述的:
1 首先安装requests这个模块,方法是 输入pip install requests。当然你要装好pip这个包管理器。 2 然后 import requests url = " " # 这里是你的url your_param = {'Refer':"sina_index"} # 这里是你要发送的请求参数!
屏蔽单句时使用# 注释此语句,屏蔽多句时,可以使用三引号把多行语句引起来
__getattribute__
__getattribute__是属性访问拦截器,就是当类的属性被访问时,会自动调用类的__getattribute__方法。
参考代码:
代码执行过程中,当调用实例对象attribute的name属性时,不会直接打印,而是把name的值作为实参传进__getattribute__方法中,经过一系列操作后,再把name的值返回。
python中只要定义了继承object的类,就默认存在属性拦截器,只不过是拦截后没有进行任何操作,而是直接返回。
我们可以自己改写__getattribute__方法来实现相关功能,比如查看权限、打印log日志等。
getattr、hasattr、setattr
对象属性的判断。
参考代码:
__getattr__、__setattr__、__delattr__
类支持 . 操作来访问属性;定制功能:耗时、日志等等。
参考代码:
__getitem__、__setitem__、__delitem__
类支持通过[]来访问属性
参考代码:
__get__、__set__、__delete__
参考代码:
参考文档:
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款