zoukankan      html  css  js  c++  java
  • day23_内置函数(__del__ item系列 ,模块)

    今日内容大纲:

    # __del__
    # item系列
    #   __getitem__
    #   __setitem__
    #   __delitem__
    # __hash__
    # __eq__
    # 一道面试题

    # 模块

    ------------------------------------ __del__ (析构方法) --------------------------------------

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

    垃圾回收机制:
    例题1-------------------
    class A:
    def __del__(self):
    # 析构方法 del A的对象 会自动触发这个方法
    print('执行我了')
    a = A()
    print(a)
    例题2------------------------
    #     # 处理文件的
    # 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()
    在这个方法执行过程中,会自动执行__del__方法,为了释放空间.不管是主动还是被动,这个f对象总会被清理掉的,
    被清理掉就触发__del__方法,触发这个方法就会归还操作系统的文件资源.

    python解释器在内部就能搞定的事儿
    申请一块空间,操作系统分配给你的
    在这一块空间之内的所有事儿,归你的python解释器来管理

    f = open("wenjian") # python -> 操作系统 --> 硬盘中的文件 --> 文件操作符
    f.close()



    ------------------------------- item ---------------------------------
    item系列 和对象使用[]访问值有联系
    obj = {"k":"v"}
    print(obj) #字典的对象
    print(obj["k"])

    在内置的模块中
    有一些特殊的方法,要求对象必须实现 __getitem__/ __setitem__ 才能使用

    # class B:
    # def __getitem__(self, item):
    # return getattr(self,item)
    # def __setitem__(self, key, value):
    # setattr(self,key,value*2)
    # def __delitem__(self, key):
    # delattr(self,key)
    # b = B()
    # # b.k2 = 'v2'
    # # print(b.k2)
    # b['k1'] = 'v1' # __setitem__
    # print(b['k1']) # __getitem__
    # del b['k1'] # __delitem__
    # print(b['k1'])



    --------------------------------- __eq__ ---------------------------------------------

    class A:
    def __init__(self,name,age):
    self.name = name
    self.age = age
    def __eq__(self, other):
    print("执行了__eq__方法")
    if self.name == other.name and self.age == other.age:
    return True
    a = A('alex',83)
    aa = A('alex',83)
    aa2 = A('alex',83)
    print(a,aa) #打印出 对象 a aa 的内存空间
    print(aa == a) #默认会执行 父类 object 中的 __eq__ 方法, 在默认的 __eq__ 中比较的是,数值和内存地址是否都一致,
    # 但是自己实现了 __eq__ 方法之后,可以对内部的代码进行修改.


    ------------------------------------------------ 一道面试题(员工信息去重) ---------------------------------

    # 一个类
    # 对象的属性 : 姓名 性别 年龄 部门
    # 员工管理系统
    # 内部转岗 python开发 - go开发
    # 姓名 性别 年龄 新的部门
    # alex None 83 python
    # alex None 85 luffy

    # 1000个员工
    # 如果几个员工对象的姓名和性别相同,这是一个人
    # 请对这1000个员工做去重



    # class Employee:
    # def __init__(self,name,age,sex,partment):
    # self.name = name
    # self.age = age
    # self.sex = sex
    # self.partment = partment
    # def __hash__(self):
    # return hash('%s%s'%(self.name,self.sex))
    # def __eq__(self, other):
    # if self.name == other.name and self.sex == other.sex:
    # return True
    # employ_lst = []
    # for i in range(200):
    # employ_lst.append(Employee('alex',i,'male','python'))
    # for i in range(200):
    # employ_lst.append(Employee('wusir',i,'male','python'))
    # for i in range(200):
    # employ_lst.append(Employee('taibai', i, 'male', 'python'))
    #
    # # print(employ_lst)
    # employ_set = set(employ_lst) # 在使用集合去重的时候,会自动执行 __hash__ 方法, 如果hash值相等,会自动执行 __eq__ 来判断连个数值是否相等,如果相等的话就会去重.
    # for person in employ_set: # 因为在列表中存储的是,每个实例化出来的对象的地址,所以可以根据对象的地址.__dict__ 得到每个对象内部存储的所有信息(姓名,年龄,性别,部门)
    # print(person.__dict__)




    -------------------------------------------------- 模块 --------------------------------------------

    # 高阶面试题/读源码/简化操作

    # 模块
    # 模块的分类
    # 内置模块
    # 安装python解释器的时候跟着装上的那些方法
    # 第三方模块/扩展模块
    # 没在安装python解释器的时候安装的那些功能
    # 自定义模块
    # 你写的功能如果是一个通用的功能,那你就把它当做一个模块

    # 什么是模块
    # 有的功能开发者自己无法完成,这样的话需要借助已经实现的函数类来完成这些功能
    # 你实现不了的功能都由别人替你实现了
    # 操作系统打交道
    # 和时间
    # 1000取随机数
    # 压缩一个文件
    # 和网络通信
    # 别人写好的一组功能 文件夹/py文件/C语言编译好的一些编译文件
    # 分类 管理方法
    # 节省内存
    # 提供更多的功能
    # 为什么要有模块?
    # 分类 管理方法
    # 节省内存
    # 提供更多的功能
    # 模块怎么用?在哪儿用?



    ---------------- 模块的创建和导入--------------
    # import my_module  # 要导入一个py文件的名字,但是不加.py后缀名
    # import my_module # 模块的名字必须要满足变量的命名规范
    # # 一般情况下 模块都是小写字母开头的名字

    # # import这个语句相当于什么???
    # # import这个模块相当于执行了这个模块所在的py文件
    #
    # # 模块可以被多次导入么? 一个模块不会被重复导入
    #
    # # 如何使用模块?
    # def login():print('in mine login')
    # name = '太亮'
    # login()
    # my_module.login()
    # # print(my_module.name)

    # 在导入一个模块的过程中到底发生了哪些事情

    # 模块的重命名
    # import my_module as m
    # m.login()
    # my_module.login()

    # 导入多个模块
    import os
    import my_module
    # PEP8规范
    # 所有的模块导入都应该尽量放在这个文件的开头
    # 模块的导入也是有顺序的
    # 先导入内置模块
    # 再导入第三方模块
    # 最后导入自定义模块
    
    
     




  • 相关阅读:
    Pikachu-RCE【远程代码、命令执行漏洞】
    Pikachu-SQL注入
    Pikachu-CSRF【跨站请求伪造】
    DWVA-xss【跨脚本漏洞】三类
    git 本地修改未提交时切换分支
    windows密码修改后同步修改git认证密码,HTTP Basic: Access denied and fatal Authentication
    git远程仓库回退
    git版本回退
    idea强制更新Maven依赖包
    IDEA多Module项目
  • 原文地址:https://www.cnblogs.com/kcwxx/p/9410419.html
Copyright © 2011-2022 走看看