美文网首页
Python对象的内置方法(__del__和__str__)的介

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

作者: 可可里西 | 来源:发表于2022-09-01 17:42 被阅读0次

    一、内置方法:

    内置方法.png

    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)
    

    执行结果:

    图片1.png

    再来一段有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)
    

    执行结果:

    图片2.png

    执行结果有小黑走了,但是我们并没有调用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方法。

    执行结果:

    图片3.png

    使用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 black
    
    print("-" * 30)
    
    

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

    图片4.png

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

    以上整体代码截图:

    图片5.png

    2.1 str方法

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

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

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

    2.1.1代码演练:

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

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

    图片6.png

    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)
    

    执行结果:

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


    图片7.png

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

    相关文章

      网友评论

          本文标题:Python对象的内置方法(__del__和__str__)的介

          本文链接:https://www.haomeiwen.com/subject/ubesnrtx.html