文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python魔术方法深入分析讲解

2023-02-08 12:03

关注

前言

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

__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魔术方法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯