龙空技术网

Python对象的内置方法(__del__和__str__)的介绍和使用

python自学网 354

前言:

当前我们对“python中类的内置方法”大概比较珍视,咱们都想要知道一些“python中类的内置方法”的相关资讯。那么小编同时在网摘上网罗了一些有关“python中类的内置方法””的相关知识,希望朋友们能喜欢,各位老铁们快快来了解一下吧!

一、内置方法:

方法名

类型

作用

__del__

方法

对象被从内存中销毁前,会被自动调用

__str__

方法

返回对象的描述信息,print函数输出使用

1.1 __del__方法

在python中,当使用类名()创建对象时,为对象分配完空间后,自动调用__init__方法,当一个对象被从内存中销毁前,会自动调用__del__方法。(__del__英文状态下的del左右一边各两个下划线)

应用场景:

__init__ : 改造初始化方法,可以让创建对象更加灵活。

__del__ :如果希望在对象被销毁前再做一些事情,可以考虑一下__del__方法。

生命周期:

一个对象从调用类名()创建,生命周期开始。

一个对象的__del__方法一旦被调用,生命周期结束。

在对象的生命周期内,可以访问对象属性或者让对象调用方法。

1.1.1 __del__代码演练

首先先来一段没有__del__方法的代码

class Cat:    def __init__(self, new_name):        self.name = new_name        print("%s来了" % self.name)black = Cat("小黑")print(black.name)

执行结果:

再来一段有__del__方法的代码

class Cat:    def __init__(self, new_name):        self.name = new_name        print("%s来了" % self.name)    def __del__(self):        print("%s走了" % self.name)black = Cat("小黑")print(black.name)

执行结果:

执行结果有小黑走了,但是我们并没有调用__del__方法,因为这个方法是在对象被从内存中销毁之前由系统自动调用的。

再次改造以上代码,增加一个分隔线:

class Cat:    def __init__(self, new_name):        self.name = new_name        print("%s来了" % self.name)    def __del__(self):        print("%s走了" % self.name)black = Cat("小黑")print(black.name)print("-" * 30)

问题:此时可以猜一猜,小黑走了是在分隔线上面输出还是下面输出?

答案:在分隔线下方输出。

原因:因为black这个变量在当前模块中是全局变量,所以当所有的代码完成执行之后,系统会把black这个变量进行回收,在回收之前就自动执行了__del__方法。

执行结果:

使用del方法删除black对象代码:

class Cat:    def __init__(self, new_name):        self.name = new_name        print("%s来了" % self.name)    def __del__(self):        print("%s走了" % self.name)black = Cat("小黑")print(black.name)del blackprint("-" * 30)

执行结果:小黑走了在下划线下方输出

原因:因为del关键字可以删除一个对象,当使用del关键字把black对象删除之后,系统会自动帮我们调用__del__方法,把这个方法执行完成之后才会执行后面的那句打印分隔线代码。

以上整体代码截图:

2.1 __str__方法

在python中,使用print输出对象变量,默认情况下,会输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址(十六进制表示)

如果在开发中,希望使用print输出对象变量时,能够打印自定义的内容,就可以利用__str__这个内置方法了。(也就是不希望输出默认情况下的类和内存地址内容,而是我们自己希望输出的内容,这个时候用__str__内置方法)

注意:__str__这个方法必须返回一个字符串。

2.1.1代码演练:

1.在默认情况下使用print看到的代码效果:

输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址。

2.使用__str__内置方法

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# black 是一个全局变量black = Cat("小黑")print(black)

执行结果:

并没有以上默认的一些对象信息,而是我们自己想要输出的定义的一些内容

关于Python面向对象方面的更多信息可以去Python自学网看看,有文章也有视频:

标签: #python中类的内置方法