首页 > 编程语言 > 详细

python-面向对象-内置方法补充

时间:2018-08-02 21:28:34      阅读:338      评论:0      收藏:0      [点我收藏+]
__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__

 



python-面向对象-内置方法补充

原文:https://www.cnblogs.com/zycorn/p/9409691.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!