Python:魔术方法(__getitem__、__len__等包含双下划线构成的方法)的简介、使用案例之详细攻略
目录
(1)、__lt__(self, other):定义小于号的行为
(1)、__add__(self, other):定义加法的行为:+
(1)、__iadd__(self, other): 定义赋值加法的行为:+=
Magic Method,即魔术方法,顾名思义,这些方法很强大,充满魔力,可以让你实现很多功能。魔术方法是python内置方法,不需要主动调用,存在的目的是为了给python的解释器进行调用,几乎每个魔法方法都有一个对应的内置函数,或者运算符,当我们对这个对象使用这些函数或者运算符时就会调用类中的对应魔法方法,可以理解为重写这些python的内置函数。
在Python中,像__getitem__这种由两个双下划线构成的方法,统一被称为魔术方法。魔术方法是为了给python解释器用的。魔术方法是属于类的方法,都是针对类来进行操作。也就是说不需要实例化类就可以访问到该方法,同时,实例化的对象都可以访问到该方法。
比如当使用len(function)时,实际上调用的就是object.__len__方法。而在使用function['key']的形式来访问元素时,实际上调用的是object.__getitem__(key)方法。
使用__getitem__和__len__方法,我们就可以实现一个对自定义数据类型的迭代和访问。
构造器,当一个实例被创建的时候调用的初始化方法
- class Test_init:
- def __init__(self):
- print("魔术方法之__init__方法")
- print(Test_init())
要想针对类的对象实例使len()函数成功执行,必须要在类中定义__len__()。如果没有定义__len__(),那么输入len(c1)会提示出错,显然错误原因是因为Class01类中并没有len()的定义。因为len()必须接收一个具体的实例化对象的属性,如果改成len(c1.values)也能成功执行!
- __ len__():返回元素的数量
- class Test_len(-title class_ inherited__">object):
- def __init__(self, *args):
- self.names = args
- def __len__(self):
- print("魔术方法之__len__方法")
- return len(self.names)
- res02 = Test_len('Bob', 'Alice', 'Tom')
- print(len(res02))
x < y 调用 x__lt__(y)
如果在类中定义了这个__getitem__ 方法,那么它的实例对象(假定为p),可以像这样p[key] 取值。当实例对象做p[key] 运算时,会调用类中的方法__getitem__。__getitem __可以让对象实现迭代功能,这样可以不断的调用数据。
- class Test_getitem:
- def __init__(self,id):
- self.id=id
-
- ,它的实例对象P,可以以P[key]形式取值
- def __getitem__(self, item): 当实例对象做P[key]运算时,就会调用类中的__getitem__()方法
- print("魔术方法之__getitem__方法")
- return self.id
-
- res = Test_getitem('This is id')
- print(res.id)
- print(res[0]) 当实例对象做P[key]运算时,就会调用类中的__getitem__()方法
- print(res['0000'])
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!