当前位置: 首页 > news >正文

注意点:不同对象(更准确地说,不同类型/类)的魔法方法(Magic Methods,也叫特殊方法,以双下划线`__`开头和结尾)通常是不一样的。

不同对象(更准确地说,不同类型/类)的魔法方法(Magic Methods,也叫特殊方法,以双下划线__开头和结尾)通常是不一样的。

魔法方法的核心作用是让不同类型的对象能够响应相同的语法或操作(比如++=len()[]等),但不同类型会根据自身特性实现不同的逻辑

具体来说:

  1. 相同的魔法方法,不同的实现逻辑
    例如__add__(对应+操作):

    • 整数(int)的__add__实现的是数值相加(1 + 2 = 3)。
    • 字符串(str)的__add__实现的是字符串拼接("a" + "b" = "ab")。
    • 列表(list)的__add__实现的是列表合并([1] + [2] = [1, 2])。

    它们都响应+操作,但底层逻辑完全不同,这正是因为不同类型对__add__的实现不同。

  2. 不同类型需要实现的魔法方法不同
    不是所有类都需要实现全部魔法方法,而是根据自身功能需求选择性实现:

    • 若一个类需要支持len(obj),就实现__len__
    • 若需要支持obj[key]的访问(如列表、字典),就实现__getitem__
    • 若需要支持obj += other,就实现__iadd__(如列表用它实现extend逻辑,整数用它实现累加逻辑)。

    例如:

    • 字典(dict)需要__getitem__来支持d[key]访问,但不需要实现__len__以外的方法来支持len(d)(因为它的长度逻辑是内置的)。
    • 自定义的“学生”类可能只需要__init__(初始化属性),而不需要__add__(因为“学生”对象通常不需要“相加”操作)。

总结

魔法方法的设计体现了 Python 的“多态”特性:相同的语法/操作,在不同对象上有不同的实现。正因为不同对象的魔法方法可以(且通常需要)不一样,才能让整数、字符串、列表等类型在面对相同操作(如++=)时,表现出符合自身特性的行为。

http://www.xdnf.cn/news/1231597.html

相关文章:

  • 字节Seed发布扩散语言模型,推理速度达2146 tokens/s,比同规模自回归快5.4倍
  • 深入 Go 底层原理(三):Goroutine 的调度策略
  • [论文阅读] 人工智能 + 软件工程 | GitHub Marketplace中CI Actions的功能冗余与演化规律研究
  • Text2SQL:如何通过自然语言直接获取数据,打破技术壁垒?
  • 【Android】通知
  • Docker 的网络模式
  • 红黑树(RBTree)
  • 【LeetCode 热题 100】(四)子串
  • 前端-移动Web-day3
  • 云环境K8s集群WebSocket连接失败解决方案
  • 【REACT18.x】使用vite创建的项目无法启动,报错TypeError: crypto.hash is not a function解决方法
  • 基于 LightGBM 的二手车价格预测
  • GaussDB having 的用法
  • 图像加密学习日志————论文学习DAY4
  • 分布式事务----spring操作多个数据库,事务以及事务回滚还有用吗
  • 机械臂的轨迹生成的多种方案
  • Jupyter notebook如何显示行号?
  • MFC 实现托盘图标菜单图标功能
  • NCV8402ASTT1G自保护N沟道功率MOSFET安森美/ONSEMI 过流过温保护汽车级驱动NCV8402ASTT1
  • 从基础功能到自主决策, Agent 开发进阶路怎么走?
  • 【计算机网络】Socket网络编程
  • Android 15 限制APK包手动安装但不限制自升级的实现方案
  • 断路器瞬时跳闸曲线数据获取方式
  • Javaweb————Apache Tomcat服务器介绍及Windows,Linux,MAC三种系统搭建Apache Tomcat
  • 嵌入式第十八课!!数据结构篇入门及单向链表
  • Oracle 11gR2 Clusterware应知应会
  • IDM下载失败排查
  • 704. 二分查找
  • 市政污水厂变频器联网改造方案-profibus转ethernet ip网关(通俗版)
  • CommonJS和ES6 Modules区别