Python---魔术方法
专栏:python
个人主页:HaiFan.
专栏简介:Python基础已经更新完,接下来是Python面向对象的知识点。
魔术方法
- 前言
- `__init__`
- `__new__`
- `__call__`
- `__del__`
- `__str__`
- 总结
前言
魔术方法就是一个类/对象中的方法,和普通方法唯一的不同是:普通方法需要调用,而魔术方法是在特定时刻自动触发
__init__
初始化魔术方法
如何触发:初始化对象时触发
参数:至少一个self
返回值:无
作用:初始化对象的成员
注:使用这个方式初始化的成员都是写入对象中的,类中不存在
class Person:def __init__(self,name):self.name = namea = Person('lisan')
print(a.name)
__new__
实例化魔术方法
如何触发:在实例化对象时触发
参数:至少一个cls,接收当前类
返回值:必须返回一个对象实例
作用:实例化对象
注意:实例化对象是Object类底层实现,其他类继承了Object的
__new__
才能够实现实例化对象。没事别碰这个魔术方法,先触发__new__
,才会触发__init__
class Person:def __init__(self,name):print('------------init')self.name = namedef __new__(cls,*args,**kwargs):print('----------new')return super(Person,cls).__new__(cls,*args,**kwargs)a = Person('lisan')
__call__
调用对象的魔术方法
如何触发:将对象当作函数调用时触发对象()
参数:至少一个self接收对象
返回值:根据情况而定
作用:可以将复杂的步骤进行合并操作,减少调用的步骤,方便使用
注意:无
class Person:def __init__(self):print('------------init')def __new__(cls ,*args ,**kwargs):print('----------new')ip = object.__new__(cls ,*args ,**kwargs)print(ip)return ipdef __call__(self ,name):print('-----------call')print(f'执行对象得到的参数{name}')
a = Person()
a('nbnb')
__del__
析构魔术方法
如何触发:当对象没有用(没有任何变量引用)的时候触发
参数:一个self
返回值:无
作用:使用完对象是回收资源
注意:del不一定会触发当前方法,只有当前对象没有任何变量接收时才会触发
class Person:def __init__(self,name):self.name = namedef __del__(self):passa = Person('lisi')
b = a
print(b.name)
b.name = 'wangwu'
print(a.name)
通过del可以删除某对象对地址的引用。
通过import sys``sys.getrefcount(a)
可以查看对地址的引用次数。
当代码全部执行结束的时候,会自动执行del方法。
__str__
触发时机:当你打印对象名的时候自动触发,调用
__str__
里面的内容
注意:一定要加返回值,return后面的内容就是打印对象看到的内容。
class Person:def __init__(self,name):self.name = name# def __str__(self):# return self.namea = Person('lisan')
print(a)
当我们直接打印对象的时候,打印出来的是一个地址,这个地址我们是看不懂的,编译器才看得懂。
想打印对象名,要显示出准确的东西,就需要 __str__
class Person:def __init__(self,name):self.name = namedef __str__(self):return self.namea = Person('lisan')
print(a)
总结
__init__和__str__
这两个是重点。
__new__
的作用:开辟空间
__del__
的作用:没有指针引用的时候会调用,一般是不需要重写的
__call__
的作用:想不想让对象当函数用。
Python---魔术方法相关推荐
- python 魔术方法
python 魔术方法 常用魔术方法 魔术方法就是一个类的特殊方法,和普通方法唯一的不同时,普通方法需要调用!而魔术方法由系统自动调用. 1.__init__ 初始化魔术方法 触发时机:初始化对象时触 ...
- 【Python魔术方法】py复习
Python魔术方法 __init__ 类似于构造器 #__init__ magic class Human:def __init__(self, name):#print('init exec')s ...
- Python 魔术方法指南
http://pycoders-weekly-chinese.readthedocs.org/en/latest/issue6/a-guide-to-pythons-magic-methods.htm ...
- python魔术方法由谁定义_Python的魔术方法
魔术方法就是在定义的类中定义一些"不一般"的方法,使类的使用更方便.完善.健壮,是python特有的方法,一般都是前后包含两个下划线__的方法称为魔术方法,例如__new__. 基 ...
- [转载] 【python魔术方法】迭代器(__iter__和__next__)
参考链接: Python __iter __()和__next __()| 将对象转换为迭代器 文章目录 `__iter__` 和 `__next__`真正的迭代器总结 python里面有很多的以__ ...
- python魔术方法abstract_python学习之面向对象高级特性和魔术方法
01_property商品应用.py 分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一. 类属性应用需求: 对于京东商城中显示电脑主机的列表页面,每次请求不可能把数 ...
- python魔术方法(一)
所谓的魔术方法就是让用户客制化类的方法,常常是python中开头有两个下划线的方法. __new__() new是创建一个类的过程 class A:def __new__(cls,x):print(& ...
- python魔术方法是什么_Python常用魔术方法
什么是魔术方法? 在Python中,所有以双下划线__包起来的方法,统称为Magic Method(魔术方法),它是一种的特殊方法,普通方法需要调用,而魔术方法不需要调用就可以自动执行. 魔术方法在类 ...
- python——魔术方法
特殊方法 1.__init__魔术方法 初始化魔术方法 2.__new__魔术方法 对象初始化: 先执行 _ new _ :分配内存空间,并返回构建好的对象(的地址) 再执行 _ init _ ...
- python魔术方法(进阶)斐波那契数列
文章目录 特殊属性 查看属性 实例化 可视化 hash bool 运算符重载应用场景 容器相关方法 可调用对象 上下文管理 上下文管理的安全性 方法的参数 contextlib.contextmana ...
最新文章
- 基于锚框与无需锚框的通用物体检测算法
- 深圳python如何评价_Python分析18万条《八佰》影评,看看观众怎么说?
- Spring boot的@PropertySource注解
- 短期目标[Till 2011-08-05]
- Liunx 安装mysql 5.6.16
- python面向对象编程之实例属性和类属性
- Centos7没有ip地址
- android开发答题app,Android APP编写简单答题器
- vue-cli新建工程后提高页面加载速度(含升级webpack4)
- 安全漏洞问题6:SQL注入
- javaERP跨境电商平台,跨境电商源码,电商ERP源码,ERP源码
- Mac快速录制音频工具:Recordia
- YankNote 笔记软件比 Sublime 好用吗
- 常见的Web服务器、应用服务器(Apache、tomcat、jetty、Nginx)简介及优缺点总结
- Hadoop生态系统全面介绍
- mysql 初始化数据库报错
- 2017年7月历史文章汇总
- 魔坊APP项目-23-种植园,宠物和种植物的状态改变、宠物的状态改动
- 111基金锁定34只高股息率股
- 通讯行业多媒体信息发布系统方案