• day 23-1 前日回顾+解构方法(__del__方法)


    进阶
    双下方法:
    内置函数/特殊语法/语法糖/内置的模块
    __len__ 内置函数len
    __call__ 特殊语法 对象()
    __new__ 特殊语法,构造方法,在实例化的时候__init__之前调用
    __init__ 特殊语法,初始化方法,在实例化的时候__new__之后调用
    __repr__ __str__
    __repr__ repr %r
    __str__ str %s print
    如果没有str,所有原本要调用__str__方法的语法,都会调用__repr__
    反过来如果没有repr,会使用父类的repr,str不能替代

    在继承中: 如果子类没有str,会先找父类的str,再找子类的repr - 扩展

    析构方法

                                    在清除一个对象在内存中的使用的时候会触发这个对象所在的类中的析构方法
    构造方法 =====》 申请一个空间
    析构方法 =====》 释放一个空间之前执行
        某对象借用了操作系统的资源,还要通过析构方法归还回去 : 文件资源  网络资源

    其实python是有垃圾回收机制的,当程序结束时,会自动释放我们的内存
      所以程序退出去之前会调用__del__方法 

    # 垃圾回收机制
    class A:
        def __del__(self):
            # 析构方法 del A的对象 会自动触发这个方法
            print('执行我了')
    a = A()
    del a  # 对象的删除 del
    print(a)  # 执行我了  报错

    在打开文件的时候,我们总是会忘记close() ,这时候就可以利用del 来帮忙做

    class File():
        # 处理文件的
        def __init__(self, file_path):
            self.f = open(file_path)
            self.name = 'alex'
    
        def read(self):
            self.f.read(1024)
    
        def __del__(self):  # 是去归还/释放一些在创建对象的时候借用的一些资源
            # del 对象的时候   程序员触发
            # python解释器的垃圾回收机制 回收这个对象所占得内存的时候  python自动触发的
            self.f.close()
    
    
    f = File('文件名')
    f.read()
    # 不管是主动还是被动,这个f对象总会被清理掉,被清理掉就触发__del__方法,触发这个方法就会归还操作系统的文件资源



  • 相关阅读:
    Hdoj 1203.I NEED A OFFER! 题解
    Hdoj 4508.湫湫系列故事——减肥记I 题解
    Hdoj 2191.悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 题解
    Hdoj 1248.寒冰王座 题解
    idea配置(卡顿、开发环境等配置),code style template
    经典收藏链接(C#总结)
    C#设计模式:原型模式(Prototype)及深拷贝、浅拷贝
    值类型和引用类型深入理解
    Resharper的配置和使用
    批处理bat 命令
  • 原文地址:https://www.cnblogs.com/zhuangdd/p/12575990.html
Copyright © 2020-2023  润新知