开发者

Python魔术方法深入分析讲解

开发者 https://www.devze.com 2023-02-09 09:20 出处:网络 作者: HaiFan.
目录前言__init____new____call____del____str__总结前言 魔术方法就是一个类/对象中的方法,和普通方法唯一的不同是:普通方法需要调用,而魔术方法是在特定时刻自动触发
目录
  • 前言
  • __init__
  • __new__
  • __call__
  • __del__
  • __str__
  • 总结

前言

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

Python魔术方法深入分析讲解

__init__

初始化魔术方法

初始化魔术方法

如何触发:初始化对象时触发

参数:至少一个self

返回值:无

作用:初始化对象的成员

注:使用这个方式初始化的成员都是写入对象中的,类中不存在

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

Python魔术方法深入分析讲解

__new__

实例化魔术方法

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

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

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

作用:实例化对象

注意:实例化对象是Object类底层实现,其他类继承了ObjectNpRmJNC的 __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')

Python魔术方法深入分析讲解

__call__

调用对象的魔术方法

如何触发:将对象当作函数调用时触发对象()

参数:至少一个self接收对象

返回值:根据情况而定

作用:可以将复杂的步骤进行合并操作,减少调用的步骤,方便使用

注意:无

class Person:
    def __init__(self):
        print('--------编程客栈----init')
    def __new__(cls ,*args ,**kwargs):
        print('----------new')
        ip = object.__NpRmJNCnew__(cls ,*args ,**kwargs)
        print(ip)
        return ip
    def __call__(self ,name):
        print('-----------call')
        print(f'执行对象得到的参数{name}')
a = Person()
a('nbnb')

Python魔术方法深入分析讲解

__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)

Python魔术方法深入分析讲解

通过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)

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

Python魔术方法深入分析讲解

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

class Person:
    def __init__(sel开发者_JAVA教程f,name):
        self.name = name
    def __str__(self):
        return self.name
a = Person('lisan')
print(a)
编程客栈

Python魔术方法深入分析讲解

总结

__init__和__str__这两个是重点。

__new__的作用:开辟空间

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

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

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号