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

Python常用魔术方法

文章目录

  • 1 魔术方法之__new__()和__init__()的用法
  • 2 魔术方法之__iter__()和__next__()的用法
  • 3 魔术方法之__call__()的用法


1 魔术方法之__new__()和__init__()的用法

Python通过__new__()方法实现类的实例化,返回对象,再调用__init__()对类属性初始化;new()方法是实例创建时执行的,而构造方法__init__()是实例创建后执行的

__new__()解析:

  1. __new__()方法是Python新式类(py2既有新式类也有经典类、py3统一为新式类;py2中的新式类需要显示继承object)引入的
  2. __new__()用于控制生成一个新实例的过程。是类级别的静态方法,在创建实例对象时执行,如果自定义类中没有重写该方法,则Python自动调用父类的方法,当所有父类也没有重写定义该方法时,则直接调用object类的__new__()方法。
""" test """class MyTest:""""""def __new__(cls, *args, **kwargs):print("__new__被调用!")result = super().__new__(cls)return resultdef __init__(self, name, age):print("__init__被调用!")self.name = nameself.age = agemytest = MyTest('kobe', '18')### 打印内容如下 ###
"""
__new__被调用!
__init__被调用!
"""

2 魔术方法之__iter__()和__next__()的用法

类中定义__iter__(),表示这个类是一个迭代器,它只在迭代开始的时候运行一次,经常与__next__()方法一起使用

""" test """class MyList:""""""def __init__(self, num):self.num = numself.start = -1def __iter__(self):print("__iter__被调用!")return selfdef __next__(self):print("__next__被调用!")self.start += 1if self.start > self.num:raise StopIterationreturn self.startx = MyList(5)
for i in x:print(i)### 打印内容如下 ###
"""
__iter__被调用!
__next__被调用!
0
__next__被调用!
1
__next__被调用!
2
__next__被调用!
3
__next__被调用!
4
__next__被调用!
5
__next__被调用!
"""

3 魔术方法之__call__()的用法

实现对象可调用(实例化的对象加括号后,调用__call__()方法)

""" test """class MyTest:""""""def __init__(self, name, age):print("__init__被调用!")self.name = nameself.age = agedef __call__(self, *args, **kwargs):print("支持被调用!")return self.namemytest = MyTest('kobe', '18')
mytest()### 打印内容如下 ###
"""
__init__被调用!
支持被调用!
"""
http://www.xdnf.cn/news/454267.html

相关文章:

  • 分布式2(限流算法、分布式一致性算法、Zookeeper )
  • 解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs-强化学习算法AlphaGo
  • sqlalchemy库详细使用
  • 【C++】17. 多态
  • AI智能体应用平台-智能体定制-企业级agent开发平台哪个更好?
  • 【嵌入式开发-按键扫描】
  • 从构想到交付:专业级软开发流程详解
  • c++中的函数(默认参数,占位参数,重载)
  • Arduino使用红外收发模块
  • MySQL基础之开窗函数
  • 嵌入式(c语言篇)Day9
  • 基于nacos2.5.1的java微服务项目开发环境配置简介
  • Spyglass:跨时钟域同步(同步单元)
  • Gin 框架指南(代码+通俗解析版)
  • 2025前四月新能源汽车出口增长52.6%,外贸ERP数字化助力汽企持续跃升
  • 给 DBGridEh 增加勾选用的检查框 CheckBox
  • 通用软件项目技术报告 - 导读I
  • C++ 并发编程(1)再学习,为什么子线程不调用join方法或者detach方法,程序会崩溃? 仿函数的线程启动问题?为什么线程参数默认传参方式是值拷贝?
  • 阿里的库存秒杀实现与Inventory Hint技术解析
  • Windows系统Anaconda/Miniconda的安装、配置、基础使用、清理缓存空间和Pycharm/VSCode配置指南
  • Linux系统编程——fork函数的使用方法
  • idea插件使用
  • Prometheus 的介绍与部署(入门)
  • Spring 的 异常管理的相关注解@ControllerAdvice 和@ExceptionHandler
  • 2011-2019年各省总抚养比数据
  • 【GESP真题解析】第 5 集 GESP一级 2023 年 3 月编程题 2:长方形面积
  • Python实例题:Python抓取相亲网数据
  • Maplibgre-gl 学习1 初识
  • leetcode刷题日记——旋转链表
  • 深入理解Java HotSpot中的即时编译