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

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__:初始化方法

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

class Test_init:
    def __init__(self):
        print("魔术方法之__init__方法")
print(Test_init())


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

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

# __ len__():返回元素的数量
class Test_len(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))

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 __可以让对象实现迭代功能,这样可以不断的调用数据。

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'])

猜你喜欢

转载自blog.csdn.net/qq_41185868/article/details/125483077