Python:魔术方法(__getitem__、__len__等包含双下划线构成的方法)的简介、使用案例之详细攻略


大气含羞草
大气含羞草 2022-09-19 10:21:25 51122
分类专栏: 资讯

Python:魔术方法(__getitem__、__len__等包含双下划线构成的方法)的简介、使用案例之详细攻略

目录

魔术方法Magic Method的简介

(1)、举例理解Magic Method

常用的魔术方法使用案例

1、常用方法

(1)、__init__:初始化方法

(2)、__len__():返回容器中元素的个数

2、比较操作符

(1)、__lt__(self, other):定义小于号的行为

3、算数运算符

(1)、__add__(self, other):定义加法的行为:+

4、增量赋值运算

(1)、__iadd__(self, other): 定义赋值加法的行为:+=

5、一元操作符

(1)、__pos__(self):定义正号的行为:+x

6、容器类型

(1)、_getitem__():返回键对应的值


魔术方法Magic Method的简介

       Magic Method,即魔术方法,顾名思义,这些方法很强大,充满魔力,可以让你实现很多功能。魔术方法是python内置方法,不需要主动调用,存在的目的是为了给python的解释器进行调用,几乎每个魔法方法都有一个对应的内置函数,或者运算符,当我们对这个对象使用这些函数或者运算符时就会调用类中的对应魔法方法,可以理解为重写这些python的内置函数

(1)、举例理解Magic Method

       在Python中,像__getitem__这种由两个双下划线构成的方法,统一被称为魔术方法。魔术方法是为了给python解释器用的。魔术方法是属于类的方法,都是针对类来进行操作。也就是说不需要实例化类就可以访问到该方法,同时,实例化的对象都可以访问到该方法。
比如当使用len(function)时,实际上调用的就是object.__len__方法。而在使用function['key']的形式来访问元素时,实际上调用的是object.__getitem__(key)方法。
使用__getitem__和__len__方法,我们就可以实现一个对自定义数据类型的迭代和访问。

常用的魔术方法使用案例

1、常用方法

(1)、__init__:初始化方法

构造器,当一个实例被创建的时候调用的初始化方法

  1. class Test_init:
  2. def __init__(self):
  3. print("魔术方法之__init__方法")
  4. print(Test_init())


(2)、__len__():返回容器中元素的个数

要想针对类的对象实例使len()函数成功执行,必须要在类中定义__len__()。如果没有定义__len__(),那么输入len(c1)会提示出错,显然错误原因是因为Class01类中并没有len()的定义。因为len()必须接收一个具体的实例化对象的属性,如果改成len(c1.values)也能成功执行!

  1. __ len__():返回元素的数量
  2. class Test_len(-title class_ inherited__">object):
  3. def __init__(self, *args):
  4. self.names = args
  5. def __len__(self):
  6. print("魔术方法之__len__方法")
  7. return len(self.names)
  8. res02 = Test_len('Bob', 'Alice', 'Tom')
  9. print(len(res02))

2、比较操作符

(1)、__lt__(self, other):定义小于号的行为

x < y 调用 x__lt__(y)


3、算数运算符

(1)、__add__(self, other):定义加法的行为:+

4、增量赋值运算

(1)、__iadd__(self, other): 定义赋值加法的行为:+=

5、一元操作符

(1)、__pos__(self):定义正号的行为:+x

6、容器类型

(1)、_getitem__():返回键对应的值

如果在类中定义了这个__getitem__ 方法,那么它的实例对象(假定为p),可以像这样p[key] 取值。当实例对象做p[key] 运算时,会调用类中的方法__getitem__。__getitem __可以让对象实现迭代功能,这样可以不断的调用数据。

  1. class Test_getitem:
  2. def __init__(self,id):
  3. self.id=id
  4. ,它的实例对象P,可以以P[key]形式取值
  5. def __getitem__(self, item): 当实例对象做P[key]运算时,就会调用类中的__getitem__()方法
  6. print("魔术方法之__getitem__方法")
  7. return self.id
  8. res = Test_getitem('This is id')
  9. print(res.id)
  10. print(res[0]) 当实例对象做P[key]运算时,就会调用类中的__getitem__()方法
  11. print(res['0000'])
文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树预备知识Python简介123796 人正在系统学习中

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=1740
赞同 0
评论 0 条
大气含羞草L0
粉丝 0 发表 10 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2950
【软件正版化】软件正版化工作要点  2872
统信UOS试玩黑神话:悟空  2833
信刻光盘安全隔离与信息交换系统  2728
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1261
grub引导程序无法找到指定设备和分区  1226
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  165
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  163
点击报名 | 京东2025校招进校行程预告  163
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  158
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
如何玩转信创开放社区—从小白进阶到专家 15
信创开放社区邀请他人注册的具体步骤如下 15
方德桌面操作系统 14
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
我有15积分有什么用? 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!