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

Python 魔法方法详解 + 全套可运行代码示例

魔法方法以xx双下划线包裹内置自动触发不用手动调用创建对象、运算、打印、取值、生命周期都会自动执行。一、基础生命周期魔法方法1.new创建实例最先执行2.init初始化实例构造方法3.del销毁实例析构方法classPerson:# 创建对象内存def__new__(cls,name):print(1. __new__ 创建对象)returnsuper().__new__(cls)# 初始化属性def__init__(self,name):print(2. __init__ 初始化)self.namename# 对象销毁时触发def__del__(self):print(f3. __del__{self.name}对象被销毁)#测试pPerson(小明)print(p.name)delp# 主动销毁二、字符串展示魔法方法strprint(对象) 人性化显示repr控制台直接输出、调试显示classBook:def__init__(self,title,price):self.titletitle self.priceprice# 面向用户展示def__str__(self):returnf书籍{self.title}价格{self.price}元# 面向开发者调试def__repr__(self):returnfBook({self.title},{self.price})bBook(Python入门,59)print(b)# 调用 __str__print(repr(b))# 调用 __repr__三、属性操作魔法方法getattr访问不存在属性触发setattr给属性赋值触发delattr删除属性触发getattribute所有属性访问都会先走classStudent:def__init__(self,age):self.ageage# 任意属性访问最先触发def__getattribute__(self,item):print(f访问属性{item})returnsuper().__getattribute__(item)# 属性不存在才触发def__getattr__(self,item):returnf不存在属性{item}# 属性赋值触发def__setattr__(self,item,value):print(f赋值{item}{value})super().__setattr__(item,value)# 删除属性def__delattr__(self,item):print(f删除属性{item})super().__delattr__(item)stuStudent(18)print(stu.age)print(stu.name)# 不存在属性stu.age20delstu.age**### 四、容器类魔法方法列表/字典风格lenlen(对象)getitem对象[下标]setitem对象[下标] 值delitemdel 对象[下标]classMyList:def__init__(self):self.data[]def__len__(self):returnlen(self.data)def__getitem__(self,idx):returnself.data[idx]def__setitem__(self,idx,val):self.data[idx]valdef__delitem__(self,idx):delself.data[idx]arrMyList()arr.data[10,20,30]print(len(arr))print(arr[1])arr[0]99delarr[2]print(arr.dat五、运算符重载魔法方法自定义对象支持 - * 运算classVector:def__init__(self,x,y):self.xx self.yy# 加法 def__add__(self,other):returnVector(self.xother.x,self.yother.y)# 减法 -def__sub__(self,other):returnVector(self.x-other.x,self.y-other.y)# 等于 def__eq__(self,other):returnself.xother.xandself.yother.ydef__str__(self):returnf({self.x},{self.y})v1Vector(2,3)v2Vector(1,4)print(v1v2)print(v1-v2)print(v1v2常用运算魔法对照表addsub-mul*truediv/eqgtlt六、可迭代、上下文管理器魔法1.iternext迭代器 for遍历classCount:def__init__(self,max_num):self.max_nummax_num self.current0def__iter__(self):returnselfdef__next__(self):ifself.currentself.max_num:self.current1returnself.currentraiseStopIteration#for 循环自动调用迭代魔法fornuminCount(5):print(num)2.enterexitwith 上下文自动开启、自动关闭资源文件、数据库常用classFileHelper:def__enter__(self):print(打开资源)returnselfdef__exit__(self,exc_type,exc_val,exc_tb):print(关闭资源自动收尾)defread(self):print(读取数据)withFileHelper()asf:f.read()七、调用魔法call对象可以像函数一样 () 调用classCalc:def__call__(self,a,b):returna*b cCalc()resc(3,5)# 直接调用对象print(res)八、常用魔法方法速查表魔法方法触发时机__new__创建对象__init__初始化对象__del__对象销毁__str__print打印__repr__调试输出__getitem__对象[索引]__len__len(对象)__add__对象对象__call__对象()调用__iter__/__next__for遍历__enter__/__exit__with语句所有代码直接复制就能运行看懂例子就能手写自定义魔法类。
http://www.rkmt.cn/news/1395309.html

相关文章:

  • 安达发|橡胶行业自动排产软件:“人脑排产“到“AI智控“的破局之路
  • 内容创作平台集成多模型以提升AI写作多样性与质量
  • 2026年八大高口碑美容预约小程序推荐榜单,解锁便捷美容新体验
  • 西门子TIA Portal V18保姆级安装教程:从注册账号到激活授权,一次搞定所有坑
  • Claude Code 用户如何快速接入 Taotoken 并配置环境变量
  • Lovable直接操作软件如何让新手3秒完成专业级操作?揭秘隐藏的渐进式引导协议v3.2
  • AI工具选型黄金窗口期(2024Q3–2025Q2决策定成败):Gartner认证的5维评估模型首次公开
  • 从平面Gerber到3D仿真模型:HFSS 3D Layout导入PCB文件的完整避坑与材料分配指南
  • Laravel 中间件与装饰器模式的关系与区别?
  • 胶囊网络与知识图谱融合:实现精准图像描述生成的工程实践
  • 从摩尔定律到韬定律:华为给半导体产业的一份新答卷
  • 自动生成会议纪要怎么选?这3个实用判断标准帮你避坑
  • 下载Claude Code并运行(简洁高效版)
  • 接口自动化实现Jenkins持续集成之多环境配置
  • 2026年河源紫金4家正规奢侈品回收机构盘点 - 小仙贝贝
  • 基于LLE系数先验模型的人脸超分辨率算法:从流形学习到细节重建
  • 对话情感分析:上下文模型如何超越传统方法,精准捕捉情感动态
  • 华硕笔记本性能优化终极指南:告别卡顿发热,提升游戏体验
  • 数电基本概念复习(常见面试题)
  • 毫米波信号透墙技术:天线嵌入式墙体解析模型与工程实践
  • 1.4t3
  • 手把手教你用Docker封装带Nvidia GPU硬解码的OpenCV+FFmpeg开发镜像
  • 2026企业核查工具推荐:AI智能解读+多节点查询谁更强?
  • 冰雪传奇手游官网下载:点卡版职业平衡技能复刻自由 PK 公平竞技
  • WebGAL视觉小说引擎:从零开始创作互动故事的终极指南
  • 萧山金城路黄金回收探访:这家商业街区门店为何让人安心? - 百福黄金回收
  • 手把手教你用ETL平台进行用户行为日志分析:从半结构化数据到流失预测数据集
  • Gitee 企业版效能度量升级:当研发数据开始回答“为什么”
  • claude code 的 skill 用法以及skill 的高级特性
  • Mooncake:以 KVCache 为中心的分离式 LLM 服务架构