持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情
1. __del__方法
在Python中
- 当使用
类名()创建对象时,为对象分配完空间后,自动调用__init__方法 - 当一个对象被从内存中销毁前,系统会自动帮我们调用
__del__方法
应用场景:
__init__改造初始化方法,可以让创建对象更加灵活__del__如果希望在对象被销毁前,再做一些事情,可以考虑以下__del__方法
生命周期:
- 一个对象从调用
类名()创建,生命周期开始 - 一个对象的
__del__方法一旦被调用,生命周期结束(相当于某对象在这个世界上最后一个调用的方法) - 在对象的生命周期内,可以访问对象属性,或者让对象调用方法
1.1 示例一
代码示例一如下所示:使用del关键字手动删除对象
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 我去了" % self.name)
# tom是一个全局变量
tom = Cat("Tom")
print(tom.name)
# del关键字可以删除一个对象
del tom
print("-" * 50)
示例一程序运行结果如下图所示:del关键字运行结束,将tom对象销毁,系统会自动运行__del__方法,然后输出了“我去了”
注意:观察运行结果可以发现,此处的“我去了”输出在横线上方,是因为变量提前被del关键字手动删除了,内存也被释放。
1.2 示例二
代码示例二如下所示:
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 我去了" % self.name)
# tom是一个全局变量
tom = Cat("Tom")
print(tom.name)
print("-" * 50)
示例二程序运行结果如下图所示:若没有手动删除tom变量,则系统会在运行结束自动释放内存,此时系统就会自动运行__del__方法,从而输出我去了。
注意:观察运行结果可以发现,“我去了”此时输出在横线下方,原因如上所讲。
2. __str__方法
在Python中,使用print输出对象变量,默认情况下,会输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址(十六进制表示)
如果在开发中,希望使用print输出对象变量时,能够打印自定义的内容,就可以利用__str__这个内置方法了。
注意:__str__方法必须返回一个字符串
代码示例如下所示:使用__str__方法,并且return一个字符串。在使用print输出这个对象变量,输出结果就为自定义的返回值。
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 我去了" % self.name)
def __str__(self):
# 必须返回一个字符串
return "我是小猫[%s]" % self.name
# tom是一个全局变量
tom = Cat("Tom")
print(tom)
print("-" * 50)
运行结果如下图所示: