Python魔术方法深入分析讲解

 更新时间:2023年02月08日 10:22:38   作者:HaiFan.  
所谓魔法函数(Magic Methods),是Python的⼀种⾼级语法,允许你在类中⾃定义函数(函数名格式⼀般为__xx__),并绑定到类的特殊⽅法中。⽐如在类A中⾃定义__str__()函数,则在调⽤str(A())时,会⾃动调⽤__str__()函数,并返回相应的结果

前言

魔术方法就是一个类/对象中的方法,和普通方法唯一的不同是:普通方法需要调用,而魔术方法是在特定时刻自动触发

__init__

初始化魔术方法

初始化魔术方法
如何触发:初始化对象时触发
参数:至少一个self
返回值:无
作用:初始化对象的成员
注:使用这个方式初始化的成员都是写入对象中的,类中不存在

class Person:
    def __init__(self,name):
        self.name = name
a = Person('lisan')
print(a.name)

__new__

实例化魔术方法

如何触发:在实例化对象时触发

参数:至少一个cls,接收当前类

返回值:必须返回一个对象实例

作用:实例化对象

注意:实例化对象是Object类底层实现,其他类继承了Object的 __new__才能够实现实例化对象。没事别碰这个魔术方法,先触发__new__,才会触发__init__

class Person:
    def __init__(self,name):
        print('------------init')
        self.name = name
    def __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 ip
    def __call__(self ,name):
        print('-----------call')
        print(f'执行对象得到的参数{name}')
a = Person()
a('nbnb')

__del__

析构魔术方法

如何触发:当对象没有用(没有任何变量引用)的时候触发

参数:一个self

返回值:无

作用:使用完对象是回收资源

注意:del不一定会触发当前方法,只有当前对象没有任何变量接收时才会触发

class Person:
    def __init__(self,name):
        self.name = name
    def __del__(self):
        pass
a = 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.name
a = Person('lisan')
print(a)

当我们直接打印对象的时候,打印出来的是一个地址,这个地址我们是看不懂的,编译器才看得懂。

想打印对象名,要显示出准确的东西,就需要 __str__

class Person:
    def __init__(self,name):
        self.name = name
    def __str__(self):
        return self.name
a = Person('lisan')
print(a)

总结

__init__和__str__这两个是重点。

__new__的作用:开辟空间

__del__的作用:没有指针引用的时候会调用,一般是不需要重写的

__call__的作用:想不想让对象当函数用。

到此这篇关于Python魔术方法深入分析讲解的文章就介绍到这了,更多相关Python魔术方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中字典的常见操作总结2

    python中字典的常见操作总结2

    这篇文章主要介绍了python中字典的常见操作总结,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Python内存映射文件读写方式

    Python内存映射文件读写方式

    这篇文章主要介绍了Python内存映射文件读写方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python中apply函数详情

    python中apply函数详情

    这篇文章主要介绍了python中apply函数详情,该函数最有用的是第一个参数,这个参数是函数,相当于C/C++的函数指针,更多详细内容,需要的小伙伴可以参考下面文章内容
    2022-01-01
  • 利用Python在一个文件的头部插入数据的实例

    利用Python在一个文件的头部插入数据的实例

    下面小编就为大家分享一篇利用Python在一个文件的头部插入数据的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 对django中render()与render_to_response()的区别详解

    对django中render()与render_to_response()的区别详解

    今天小编就为大家分享一篇对django中render()与render_to_response()的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python命令启动Web服务器实例详解

    Python命令启动Web服务器实例详解

    这篇文章主要介绍了Python命令启动Web服务器实例详解的相关资料,需要的朋友可以参考下
    2017-02-02
  • Python几种常见算法汇总

    Python几种常见算法汇总

    这篇文章主要介绍了如何用Python实现几种常见算法,文中代码简单易懂,方便大家更好的学习,感兴趣的朋友可以了解下
    2020-06-06
  • 小众实用的Python 爬虫库RoboBrowser

    小众实用的Python 爬虫库RoboBrowser

    这篇文章主要介绍了Python 爬虫库RoboBrowser的使用简介,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • 简单谈谈Python中函数的可变参数

    简单谈谈Python中函数的可变参数

    和C语言一样,Python中也有可变参数函数,即一个函数可以接收多个参数,而这些参数的个数在函数调用之前事先是不知道的。下面这篇文章我们来介绍下python中的可变参数
    2016-09-09
  • matplotlib给子图添加图例的方法

    matplotlib给子图添加图例的方法

    今天小编就为大家分享一篇matplotlib给子图添加图例的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08

最新评论