码农知识堂 - 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'])

  • 相关阅读:
    MSP430F5529时钟系统配置
    魔兽世界开服一条龙服务端架设服务器搭建
    潇 洒 女 兵 分 解
    杨辉三角(Java实现)
    APP定制开发流程和特点有哪些?
    常用算法-Java
    (STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(1)
    kubernetes集群编排(7)
    编程中什么情况下需要加 volatile?
    vsphere虚拟网络组件
  • 原文地址:https://blog.csdn.net/qq_41185868/article/details/125483077
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号