# 构造方法 申请一个空间# 析构方法 释放一个空间

# 某个对象借用了操作系统的资源,还要通过析构方法归还回去:文件资源 网络资源

# 垃圾回收机制

class A:    def __del__(self):        #构析方法  del   A的对象会自动出发这个方法        print('哈哈哈哈')a=A()del aprint(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()del f    # del 对象的时候  程序员触发#不管是主动还是被动,这个f 对象总会被清理掉,被清理掉就出发__del__方法,触发这个方法就会归换操作系统的文件资源

# python 解释器在内存部就能搞定的事# 申请一块儿空间 操作系统分配给你的# 在这一块儿空间之内的所有事儿 归你的python解释器来管理## a=1# del a# 对象--> 内存

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

# item系列 和对象使用[]访问值有联系

ojb={'k':"v"}print(ojb)print(ojb['k'])

# 在内置的模块中,有一些特殊的方法,要求对象必须实现__getitem__/__setitem__才能使用class B:    def __getitem__(self, item):        return getattr(self,item)    def __setitem__(self, key, value):        setattr(self,key,value*2)#self.key = v    def __delitem__(self, key):        delattr(self,key)b=B()

b['a']='c'# print(b['a'])del b['a']print(b.__dict__)

class A:    def __init__(self,li):        self.li=li    def __getitem__(self, item):        return self.li[item]    def __setitem__(self, key, value):        self.li[key]=value    def __delitem__(self, key):        self.li.pop(key)a=A(['111','222','ccc','dddd'])print(a.li[2])print(a[2])#  用这种a[2]='weew'print(a.li)del a[3]print(a.li)

# hash方法# 底层数据结构基于hash值寻址的优化操作# hash是一个算法# 能够把某一个要存在内存里的值通过一系列计算,# 保证不同值的hash结果是不一样的# '127647862861596'  ==> 927189778748# 对同一个值在多次执行python代码的时候hash值是不同# 但是对同一个值 在同一次执行python代码的时候hash值永远不变print(hash('abc')) 第一次 # 6048279107854451739   第二次 #-6924590381416277323print(hash('abc'))# 6048279107854451739     #-6924590381416277323print(hash('abc'))# 6048279107854451739     #-6924590381416277323print(hash('abc'))# 6048279107854451739     #-6924590381416277323print(hash('abc'))# 6048279107854451739     #-6924590381416277323print(hash('abc'))# 6048279107854451739     #-6924590381416277323

# 字典的寻址  - 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 Truea = 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(a==aa==aa2)     # ==这个语法 是完全和__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 Trueemploy_lst = []for  i in range(200):    employ_lst.append(Employee('alex',i,'male','python'))for  i in range(200):    employ_lst.append(Employee('wusi',i,'male','python'))for  i in range(200):    employ_lst.append(Employee('taiba',i,'male','python'))employ_lst=set(employ_lst)for person in employ_lst:    print(person.__dict__)

# set集合的去重   先调用hash 再调用eq, eq不是每次都出发,只有hash 值相等才触发

__del__,item系列 ,hash方法,__eq__,的更多相关文章

  1. python 之前函数补充(__del__, item系列, __hash__, __eq__) , 以及模块初体验

    __str__ :  str(obj) ,  需求必须实现了 __str__, 要求这个方法的返回值必须是字符串  str  类型 __repr__ (意为原型输出):  是 __str__ 的备胎( ...

  2. item系列魔法方法

    class Foo: def __init__(self, name): self.name = name def __getitem__(self, item): print('getitem执行' ...

  3. python面向对象( item系列,__enter__ 和__exit__,__call__方法,元类)

    python面向对象进阶(下)   item系列 __slots__方法 __next__ 和 __iter__实现迭代器  析构函数 上下文管理协议 元类一.item系列 把对象操作属性模拟成字典的 ...

  4. [ python ] 反射及item系列

    反射 什么是反射? 通过字符串的形式操作对象相关属性.python中的事物都是对象: 关键方法: (1)getattr:获取属性 (2)setattr:设置属性 (3)hashattr:检测是否含有属 ...

  5. python 全栈开发,Day24(复习,__str__和__repr__,__format__,__call__,__eq__,__del__,__new__,item系列)

    反射: 使用字符串数据类型的变量名来使用变量 wwwh即what,where,why,how  这4点是一种学习方法 反射 :使用字符串数据类型的变量名来使用变量 1.文件中存储的都是字符串 2.网络 ...

  6. 1、__del__ 2、item系列 3、__hash__ 4、__eq__

    1.__del__   析构方法       释放一个空间之前之前 垃圾回收机制   2.item系列   和对象使用[ ]访问值有联系 __getitem__ __setitem__ __delit ...

  7. 面向对象进阶-item系列、__new__、__hash__、__eq__ (四)

    item系列 dic = {'k':'v'}# 对象 : 存储属性 和调用方法dic['k'] = 'v'# class Foo:#     def __init__(self,name,age,se ...

  8. 面向对象的进阶(item系列,__new__,__hash__,__eq__)

      面向对象的进阶(item系列,__new__,__hash__,__eq__) 一.item系列 getitem.setitem.delitem(操作过程达到的结果其实就是增删改查) class ...

  9. 实现纸牌游戏的随机抽牌洗牌过程(item系列几个内置方法的实例)

    实现纸牌游戏的随机抽牌洗牌过程(item系列几个内置方法的实例) 1.namedtuple:命名元组,可以创建一个没有方法只有属性的类 from collections import namedtup ...

随机推荐

  1. php中弱语言类型的底层实现

    PHP是弱语言类型,主要分为三类: 1.标量类型:integer.string.float.boolean 2.复合类型:array.object 3.特殊类型:resource.null php是通 ...

  2. <div class="clear"></div>

    <div class="clear"></div> 这里的clear是样式名.样式写在CSS文件中 从名称来看估计你的样式为:.clear {clear:b ...

  3. caffe测试mnist问题-error while loading shared libraries

    问题描述 build/examples/mnist/convert_mnist_data.bin: error while loading shared libraries: libcudart.so ...

  4. 原生js实现数据的双向绑定

    原生js实现数据的双向绑定 需要了解的属性是原色js的Object.definePrototype(obj,pop,descript); obj:被构造的对象 pop:被构造的对象的属性,创建对象或修 ...

  5. 强大的dfs(用处1——拓扑排序【xdoj1025】,用处二——求强联通分量【ccf高速公路】)当然dfs用处多着咧

    xdoj 1025 亮亮最近在玩一款叫做“梦想庄园”的经营游戏.在游戏中,你可以耕种,养羊甚至建造纺织厂. 如果你需要制造衣服,你首先得有布匹和毛线.布匹由棉花纺织而成:毛线由羊毛制成,而羊需要饲料才 ...

  6. openLayers 4 canvas图例绘制,canvas循环添加图片,解决图片闪烁问题

    一.问题来源: 接触Openlayers 一段时间了,最近做了一个农业产业系统,项目中涉及到产业图例,最后考虑用canvas来绘制图例图像.当中带图片的图例移动时,图片会实现闪烁留白情况.闪烁是因为绘 ...

  7. hasura-graphql 集成 pipelinedb 1.0.0

    pipelinedb 1.0.0 已经是一个标准的pg 扩展了,同时以前的语法也有变动,但是集成进hasura-graphql 更方便了 使用docker-compose 运行 环境准备 docker ...

  8. ory Oathkeeper cloud native 访问认证平台

    ORY Oathkeeper is an Identity & Access Proxy (IAP) that authorizes HTTP requests based on sets o ...

  9. 理解js事件循环(event loop)

    队列:先进先出 栈:后进先出 javascript的Event Loop 和 Node.js的Event Loop 区别: js(运行在浏览器),有主线程.异步任务队列的概念: node.js使用li ...

  10. POJ2584 T-Shirt Gumbo——网络最大流模板

    题目:http://poj.org/problem?id=2584 像模板一样的简单题.继续使用 & 的当前弧优化和神奇的构造函数. #include<iostream> #inc ...