zoukankan      html  css  js  c++  java
  • 【2020Python修炼记】Python语法入门—内置方法 __str__和__del__

    python的class机制内置了很多特殊的方法来帮助使用者高度定制自己的类,

    这些内置方法都是以双下划线开头和结尾的,会在满足某种条件时自动触发。

    我们以常用的__str__和__del__为例来简单介绍它们的使用。

    1、__str__方法

    __str__方法会在对象被打印时自动触发,print功能打印的就是它的返回值,

    我们通常基于方法来定制对象的打印信息,该方法必须返回字符串类型

    class People:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def __str__(self):
            # print('运行了...')
            return "<%s:%s>" %(self.name,self.age)
    
    
    obj = People('辣白菜同学', 18)
    
    # print(obj.__str__())
    print(obj)  # <'辣白菜同学':18>
    
    obj1=int(10)
    print(obj1)
    
    # 输出结果
    # <辣白菜同学:18>
    # 10

    2、__del__方法

    __del__会在对象被删除时自动触发。

    由于python自带的垃圾回收机制会自动清理python程序的资源,所以当一个对象只占用应用程序级资源时,完全没必要为对象定制__del__方法,但在产生一个对象的同时涉及到申请系统资源(比如系统打开的文件、网络连接等)的情况下,关于系统资源的回收,python的垃圾回收机制便派不上用场了,需要我们为对象定制该方法,用来在对象被删除时自动触发回收系统资源的操作

    class People:
        def __init__(self, name, age):
            self.name = name
            self.age = age
            self.x = open('a.txt',mode='w')
            # self.x = 占据的是操作系统资源
    
        def __del__(self):
            print('run...')
            # 发起系统调用,告诉操作系统回收相关的系统资源
            self.x.close()
    
    obj = People('辣白菜同学', 18)
    # del obj # obj.__del__()
    print('============>')

    # 输出结果:

    ============>
    run...

    class People:
        def __init__(self, name, age):
            self.name = name
            self.age = age
            self.x = open('a.txt',mode='w')
            # self.x = 占据的是操作系统资源
    
        def __del__(self):
            print('run...')
            # 发起系统调用,告诉操作系统回收相关的系统资源
            self.x.close()
    
    obj = People('辣白菜同学', 18)
    del obj # obj.__del__()
    print('============>')
    
    # 输出结果
    # run...
    # ============>
    探索版二--View Code
  • 相关阅读:
    客户端和Web Api服务的交互
    ASP.NET MVC4 validate验证遇到DateTime 类型的Bug(完整解决方案)
    不能说的秘密 一个很感人的爱情故事
    快五一了,申请了第一个Blog,哈哈。
    人生没有目标是可怕的。。。
    在.NET中使用SMTP发送邮件,有一些疑问
    smtp验证发邮件,今天好郁闷,终于解决了
    C#、.NET迷你音乐播放器(改进版)
    C#实现冒泡排序 堆栈 队列
    C#、.NET版邮件(群)发系统
  • 原文地址:https://www.cnblogs.com/bigorangecc/p/12707190.html
Copyright © 2011-2022 走看看