zoukankan      html  css  js  c++  java
  • python-面向对象-内置方法补充

    __del__
    item系列
      __getitem__
      __setitem__
      __delitem__
    __hash__
    __eq__

    构造方法  申请一个空间
    析构方法 释放一个空间之前执行
    某对象借用了操作系统的资源,还要通过析构方法归还回去 : 文件资源 网络资源

    # 垃圾回收机制
    class A:
        def __del__(self):
            # 析构方法 del A的对象 会自动触发这个方法
            print('执行我了')
    a = A()
    del a  # 对象的删除 del
    print(a)
    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__方法,触发这个方法就会归还操作系统的文件资源

    python解释器在内部就能搞定的事儿
    申请一块儿空间 操作系统分配给你的
    在这一块儿空间之内的所有事儿 归你的python解释器来管理
    对象 --> 内存
    f = open('wenjian')  # python --> 操作系统 --> 硬盘里的文件 --> 文件操作符
    f.close()
    # 文件操作符
    #del f  #释放完后自动帮你关闭文件

    item系列 和对象使用[]访问值有联系
    obj = {'k':'v'}
    print(obj)   # 字典的对象
    print(obj['k'])
    在内置的模块中,
    有一些特殊的方法,要求对象必须实现__getitem__/__setitem__才能使用
    class B:
        def __init__(self,lst):
            self.lst = lst
        def __getitem__(self, item):
            return self.lst[item]
        def __setitem__(self, key, value):
            self.lst[key] = value
        def __delitem__(self, key):
            self.lst.pop(key)
    b = B(['111','222','ccc','ddd'])
    print(b.lst[0])
    print(b[0])
    b[3] = 'alex'
    print(b.lst)
    del b[2]
    print(b.lst)
    hash方法
    底层数据结构基于hash值寻址的优化操作
    hash是一个算法
    能够把某一个要存在内存里的值通过一系列计算,
    保证不同值的hash结果是不一样的
    '127647862861596' ==> 927189778748
    对同一个值在多次执行python代码的时候hash值是不同
    但是对同一个值 在同一次执行python代码的时候hash值永远不变
    print(hash('abc')) # 6048279107854451739
    print(hash('abc'))
    print(hash('abc'))

    字典的寻址  - hash算法
    d = {'key':'value'}
    # hash - 内置函数

     

    set集合

    se = {1,2,2,3,4,5,'a','b','d','f'}
    print(se)
    d = {'key':'v1','key':'v2'}
    print(d['key'])

    hash(obj) #obj内部必须实现了__hash__方法

    __eq__
    class A:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def __eq__(self, other):
            if self.name == other.name and self.age == other.age:
                return True
    a = A('alex',83)
    aa = A('alex',83)
    aa2 = A('alex',83)
    aa3 = A('alex',83)
    aa4 = A('alex',83)
    aa5 = A('alex',83)
    aa6 = A('alex',83)
    print(a,aa)
    print(aa3 == aa == aa4)  # ==这个语法 是完全和__eq__


  • 相关阅读:
    如何使用jmeter来实现更大批量的并发的解决方案
    jmeter分布式集群---部署多台机器进行性能压力测试
    HP Loadrunner12的下载和安装
    python 安装三方库碰到的问题
    测试风险评估
    Android Studio Android SDK Android NDK 官方下载地址
    PC版微信数据库解密详细教程
    js文件加载优化
    MYiSAM和InnoDB引擎区别(mysql)
    php利用cookie防止重复提交解决办法
  • 原文地址:https://www.cnblogs.com/zycorn/p/9409691.html
Copyright © 2011-2022 走看看