码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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__:初始化方法

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

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

  • 相关阅读:
    MySQL - 深入解析MySQL索引数据结构
    【基于FreeRTOS的STM32F103系统】Heap_4内存管理机制程序详解
    java.sql.Date、java.sql.Time 和 java.sql.Timestamp
    基于C++MFC的网络安全扫描器的设计与实现
    Flutter GetX使用详解
    信创操作系统--麒麟Kylin桌面操作系统 (项目十一 使用终端及查看硬件信息)
    js实现对象数组去重
    Laravel定时任务
    mysql的约束
    Java设计模式之解释器模式
  • 原文地址:https://blog.csdn.net/qq_41185868/article/details/125483077
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号