专栏: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---魔术方法相关推荐

  1. python 魔术方法

    python 魔术方法 常用魔术方法 魔术方法就是一个类的特殊方法,和普通方法唯一的不同时,普通方法需要调用!而魔术方法由系统自动调用. 1.__init__ 初始化魔术方法 触发时机:初始化对象时触 ...

  2. 【Python魔术方法】py复习

    Python魔术方法 __init__ 类似于构造器 #__init__ magic class Human:def __init__(self, name):#print('init exec')s ...

  3. Python 魔术方法指南

    http://pycoders-weekly-chinese.readthedocs.org/en/latest/issue6/a-guide-to-pythons-magic-methods.htm ...

  4. python魔术方法由谁定义_Python的魔术方法

    魔术方法就是在定义的类中定义一些"不一般"的方法,使类的使用更方便.完善.健壮,是python特有的方法,一般都是前后包含两个下划线__的方法称为魔术方法,例如__new__. 基 ...

  5. [转载] 【python魔术方法】迭代器(__iter__和__next__)

    参考链接: Python __iter __()和__next __()| 将对象转换为迭代器 文章目录 `__iter__` 和 `__next__`真正的迭代器总结 python里面有很多的以__ ...

  6. python魔术方法abstract_python学习之面向对象高级特性和魔术方法

    01_property商品应用.py 分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一. 类属性应用需求: 对于京东商城中显示电脑主机的列表页面,每次请求不可能把数 ...

  7. python魔术方法(一)

    所谓的魔术方法就是让用户客制化类的方法,常常是python中开头有两个下划线的方法. __new__() new是创建一个类的过程 class A:def __new__(cls,x):print(& ...

  8. python魔术方法是什么_Python常用魔术方法

    什么是魔术方法? 在Python中,所有以双下划线__包起来的方法,统称为Magic Method(魔术方法),它是一种的特殊方法,普通方法需要调用,而魔术方法不需要调用就可以自动执行. 魔术方法在类 ...

  9. python——魔术方法

    特殊方法 1.__init__魔术方法 初始化魔术方法 2.__new__魔术方法 对象初始化: ​ 先执行 _ new _ :分配内存空间,并返回构建好的对象(的地址) ​ 再执行 _ init _ ...

  10. python魔术方法(进阶)斐波那契数列

    文章目录 特殊属性 查看属性 实例化 可视化 hash bool 运算符重载应用场景 容器相关方法 可调用对象 上下文管理 上下文管理的安全性 方法的参数 contextlib.contextmana ...

最新文章

  1. 基于锚框与无需锚框的通用物体检测算法
  2. 深圳python如何评价_Python分析18万条《八佰》影评,看看观众怎么说?
  3. Spring boot的@PropertySource注解
  4. 短期目标[Till 2011-08-05]
  5. Liunx 安装mysql 5.6.16
  6. python面向对象编程之实例属性和类属性
  7. Centos7没有ip地址
  8. android开发答题app,Android APP编写简单答题器
  9. vue-cli新建工程后提高页面加载速度(含升级webpack4)
  10. 安全漏洞问题6:SQL注入
  11. javaERP跨境电商平台,跨境电商源码,电商ERP源码,ERP源码
  12. Mac快速录制音频工具:Recordia
  13. YankNote 笔记软件比 Sublime 好用吗
  14. 常见的Web服务器、应用服务器(Apache、tomcat、jetty、Nginx)简介及优缺点总结
  15. Hadoop生态系统全面介绍
  16. mysql 初始化数据库报错
  17. 2017年7月历史文章汇总
  18. 魔坊APP项目-23-种植园,宠物和种植物的状态改变、宠物的状态改动
  19. 111基金锁定34只高股息率股
  20. 通讯行业多媒体信息发布系统方案

热门文章

  1. 稀土永磁材料的涡流损耗
  2. Android 蓝牙及蓝牙通讯讲解
  3. 文章-自学的程序员如何找到好工作?
  4. [siggraph2011]Secrets of CryENGINE 3 Graphics Technology
  5. js 弹出QQ对话框
  6. 揭秘微信营销“暗黑产业链”:粉丝阅读量明码标价
  7. AEC行业那些开源的软件在这里
  8. 扩散模型(Diffusion Model)最新综述!
  9. OpenSSL 代码问题漏洞(CVE-2020-1971)(CVE-2020-1967)
  10. 【真人手势动画制作软件】万彩手影大师教程 | 去除水印