Python 类的常用内置方法 __del__ 和 __str__(二)

类中四个常用的内置方法:

__new__创建对象时,被自动调用。
__init__对象被初始化时,自动调用。
__del__删除对象或对象被从内存中销毁前,自动调用。
__str__print 打印实例对象时自动调用。返回对象的描述信息。

__del__() 对象被销毁前自动调用

当一个对象被从内存中销毁前,会自动调用 __del__() 方法。

如果我们想要在对象被销毁前,再做一些事情,可以使用 __del__() 方法。__del__() 方法一旦被调用,这个对象的生命就走到尽头了。

class Person:
    def __init__(self, name, age):  # 对象创建的时候自动调用
        self.name = name
        self.age = age

    def __del__(self):  # 对象销毁前自动调用
        print(f'{self.name}我被销毁了')


Tom = Person('张三', 21)

print(Tom.name)
print('--------------------')
图片[1]-Python 类的常用内置方法 __del__ 和 __str__(二)-尤尤'blog

当程序执行完毕后,内存中存储的类、函数、变量等都会自动释放内存,也就是对象会被自动回收。在上面的程序中,Tom 是一个全局变量,程序执行完后,才会被销毁。

del 关键字

可以通过 del 关键字删除对象属性或者删除实例对象。对象一旦被删除,它在内存中也会被销毁。当使用 del 删除对象后,系统会自动调用 __del__() 方法。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __del__(self):
        print(f'{self.name}我被销毁了')


Tom = Person('张三', 21)
print(Tom.name)

# 删除Tom对象,在删除之前,会自动调用__del__方法
del Tom

# print(Tom.name) # NameError: name 'Tom' is not defined
print('--------------------')  # Tom对象被提前使用del删除了,所以__del__方法比这句代码更早执行
图片[2]-Python 类的常用内置方法 __del__ 和 __str__(二)-尤尤'blog

__str__() 返回对象的描述信息

在实例对象中存储的是内存地址,当我们使用 print 输出实例对象时,默认会输出这个实例对象是由哪一个类创建的,以及在内存中的地址。如果在开发中,我们希望使用 print 输出实例对象时,能打印自定义的内容,就可以通过重写 __str__ 方法自定义输出内容。

一般用来返回类的作用,或者对象的状态。

要注意的是 __str__ 方法必须返回一个字符串。

1)如果没有重写 __str__() 方法,使用 print 调用实例对象变量名时,得到的是这个变量引用的对象是由哪一个类创建的,以及在内存中的地址。

class Demo:
    pass


d = Demo()
# 如果没有重写 __str__() 方法,使用print调用实例对象变量名时,得到的是这个变量引用的对象是由哪一个类创建的,以及在内存中的地址
print(d)  # <__main__.Demo object at 0x000001BA1D6525F0>
图片[3]-Python 类的常用内置方法 __del__ 和 __str__(二)-尤尤'blog

2)如果重写 __str__() 方法,打印的不再是内存地址,而是 __str__ 返回的内容。

注意:__str__ 必须有返回值,且必须返回一个字符串。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __del__(self):
        print(f'{self.name}被销毁了__del__')

    def __str__(self):
        # 必须返回一个字符串
        return '[%s]今年[%d]岁,__str__方法' % (self.name, self.age)


Tom1 = Person('李四', 21)

print(Tom1)  # 打印的不再是内存地址,而是__str__返回的内容
图片[4]-Python 类的常用内置方法 __del__ 和 __str__(二)-尤尤'blog

4个常用内置方法的使用场景及对象的生命周期

1)__new__() :使用 类名() 创建实例对象时,自动调用 __new__() 方法为对象在内存中分配内存空间,然后返回对象的引用。Python 解释器获得对象的引用后,将这个引用作为第一个参数传给 __init__() 方法。

2)__init__() :创建实例对象时,为对象分配完内存空间后,自动调用。使创建的对象更加灵活,拥有自己特有的属性。

3)__del__() :对象被从内存中销毁前,自动调用。如果希望在对象被销毁前,再做一些事情,可以重写 __del__() 方法。

4)__str__() :使用 print() 打印输出对象时自动调用。返回对象的描述信息。

对象的生命周期:从使用 类名() 创建对象开始,到 对象的 __del__() 方法被调用结束。


© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容