Python 魔法方法

1.初始魔方方法

        Python中的魔法方法(Magic Methods),也称为双下划线方法(Dunder Methods),是特殊方法,其名称以双下划线开头和结尾,例如__init__、__str__、__add__等。这些方法提供了一种使Python对象能够使用内置函数和语言结构的方式。

2.魔法方法举例

        在Python中魔法方法有很多种,在这篇文章中我们先来介绍一下三个魔法方法。__init__、__new__、__del__。

1. __new__()

        __new__(cls[...])在__init__()之前被调用,参与构建对象。对象的诞生流程是先调用__new__()方法,创建一个类的实例,然后将其传递给__init__()方法,在进行个性化定制。

class CapStr(str):         #创建一个类并且继承str类
	def __new__(cls,string):   #__new__(cls,[...])
		string = string.upper() #利用upper()将传进来的参数都变成大写
		return super().__new__(cls,string)  #返回str类中的__new__()方法,创建一个类
	
c = CapStr("Python")
c
# 'PYTHON'

# CapStr继承了str类,所以实例对象调用str中的方法也是可以的
c.lower()
# 'python'

        上述代码中,CapStr中的__new__函数将系统的__new__函数重写了一下,在系统生成实例对象前,先用__new__将参数变为大写,再去调用str类中的__new__创建真正的实例。

        注意:c对象是 因为调用了父类中的new方法才生成的。而因为重写的__new__()方法被覆盖了,功能变成将输入的参数变为大写了。

2. __init__()

        对于__init__(),我想大家都不陌生,我们在接触构造方法的时候,第一个接触的就是它了,__init__()的作用是在对象初始化的时候就实现个性化定制,(在类实例化对象的时候自动进行调用)。

class Fun:
	def __new__(self):
		print("我是__init__,我自动执行了~~")

f = Fun()
# 我是__init__,我自动执行了~~

        通过上面的代码我们可以看到,我们并没有调用__new__()方法,仅仅在创建实例对象的时候就自动输出了__new__()中的内容,说明__new__()方法在对象初始化的时候就会自动调用。 

3. __del__()

        在对象被创建的时候有__new__()方法,与之对应的,在对象销毁的时候,也有一个方法——__del__()。

具体用法如下:

>>> class B:
	def __init__(self):
		print("我被创建了!")
	def __del__(self):            #创建构造方法__del__
		print("我被销毁了!")

		

b = B()        #创建实例对象b
# 我被创建了!
del b          #销毁一个对象的方法为 del + 对象名
# 我被销毁了!


b = B()     
# 我被创建了!
c = b         #将实例对象赋值给另一个变量,只有将全部的实例对象都销毁后,才会执行__del__()的内容
del b
del c
# 我被销毁了!

        根据上述代码,可以得知,并不是说使用del就会触发__del__()魔法方法,只有在所有对象被销毁时才会调用 。因为Python引入了垃圾回收机制garbage collection,当检测到一个对象没有任何引用的时候,才会将其销毁。

        对于__del__()方法,可以通过一个该实例的新引用来推迟其销毁(对象重生)。

大家感兴趣可以看我的另一篇文章。对象重生之复活吧我的爱人!icon-default.png?t=N3I4https://blog.csdn.net/qq_49873907/article/details/130121421

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学者山羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值