• Python_021(内置方法讲解二)


    一.内置方法二

    1.__del__方法:

      a:构造方法:创建一个空间,  析构方法;释放一个空间;

      b:触发del的情况:Python解释器的垃圾回收机制,和遇到 del 对象名

    c:析构方法的思想:

    class A:
        def __del__(self):
            print(self)
    a = A()
    del a            #这里先执行了__del__方法,再删除对象a,因为执行__del__方法时还要传入self;
    print(a)
    #输出结果:
    <__main__.A object at 0x0000013CF5F59128>  被执行了
    Traceback (most recent call last):
      File "D:/Python/course/23.模块/day23/3.析构方法.py", line 49, in <module>
        print(a)
    NameError: name 'a' is not defined

    d:python的垃圾回收机制:

    class A:
        def __del__(self):
            print('Python解释器会在程序跑结束后执行我')
    a = A()
    print(a)
    #输出结果:
    <__main__.A object at 0x000001F823159128>
    Python解释器会在程序跑结束后执行我

    总结:del方法:是去归还/释放一些在创建对象时借用的一些资源(有可能是操作系统的资源)

    例子:像一些常用的变量在Python底层的一些对象,都有Python解释器帮你回收,

    而像一些像操作系统借用的资源就需要你执行回收方法自己释放;

    像文件句柄;执行close操作,还有一些网络资源;

    3.计算机内部执行一些小常识:

    a:申请一块空间 操作系统会分配给你的  b:在这一块空间之内的所有事,归你的Python解释器管理;

    *****所以在你借用了操作系统资源时,在程序结束之前要还回去,在del方法中写关闭代码;

    4.item系列:

    1)getitem:对象['key']触发该方法;

    class A:
         def __getitem__(self, item):
        print(item)
        return item      #[item]触发getitem方法
    a = A()
    print(a['a'])
    #输出结果:
    a  a

    2)getitem和setitem的一些结合应用:

    class A:
        def __getitem__(self, item):
        return getattr(self,item)    #相当于self.key
        def __setitem__(self, key, value):
        setattr(self,key,value)   #相当于self.key = value
    a = A()
    a['k'] = 'v'
    print(a['k'])
    
    
    class A:
        def __setitem__(self, key, value):
        self.key = value
        def __getitem__(self, item):
        return self.key
    a = A()
    a['k'] = 'v'
    print(a['k'])
    #这两段代码的结果一样都是v,上面用到了映射

    5.__hash__方法:

    1)底层数据结构基于hash值寻址的优化操作
    2) hash是一个算法,保证不同值的hash结果不一样的
    对同一个值多次在Python解释器中执行的时候,hash值是不同的
    但是对同一个值,在同一次执行Python代码的时候hash值永远不变
    3)hash值不是万能的,有可能两个值的hash值相同,所以如果在一个变量进行hash算法之后发现地址有值,会进行一个判断,判断两个变量的值是否相等,若相等覆盖,若不等,则对这个变量再进行二次寻址,也遵循一个算法;

    4)hash和eq(obj)  # obj内部必须含有__hash__方法

    class A:
        def __init__(self,name):
            self.name = name
        def __eq__(self, other):
            if self.name == other.name:
                return True
    a = A('s')
    b = A('s')
    c = A('s')
    print(a == b == c)
    #输出结果
    True

    ::::::==触发对象中的eq方法

     

  • 相关阅读:
    commando VM安装
    Pocscan搭建详解
    Windows-RW-LinuxFS
    Festival
    ffmpeg-metadata
    FFmpeg-Screen-Recording
    ffmpeg-map
    ffmpeg-utils
    Linux-Fcitx5
    ffmpeg-volumedetect
  • 原文地址:https://www.cnblogs.com/0627zhou/p/9416391.html
Copyright © 2020-2023  润新知