魔法方法__hash__

哈希值的语法

__hash__
    求hash值的
    底层数据结构为hash表,
    hash()函数

    hash表存储数据的原理:
        1,计算哈希值,决定hash表中存储的位置
        2.与当前位置其他对象去比较,如果相等,则不存储,不等,才存储进来
        __eq__
print(hash('a'))

class Student:
    def __init__(self,id,name,age):
        self.id=id
        self.name=name
        self.age=age
    def __hash__(self):
        #根据指定的元素计算哈希值,object中的hash是基于地址进行计算的
        return hash(self.id)
    #按指定的内容去比较
    def __eq__(self, other):
        return self.id==other.id

stu1 = Student(1001,'张三',19)
stu2 = Student(1001, '张三', 19)
stu3 = Student(1001, '张三', 19)
print(hash(stu1))
set1=set()
set1.add(stu1)
set1.add(stu2)
set1.add(stu3)
#思考?可以存储几个对象进来?
print(set1)

 运行结果后有多个地址

 919663390355993582
1001
{<__main__.Student object at 0x0000000002987588>}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中,`__hash__()`是一个特殊方法(也称为魔术方法),用于定义对象的哈希值。哈希值是一个唯一的整数,用于在集合(如字典、集合)中快速查找和比较对象。 当我们在自定义类中没有定义`__hash__()`方法时,默认情况下,对象的哈希值是根据对象的内存地址计算的,即`id(obj)`。这意味着相同的对象可能具有不同的哈希值,因为它们在内存中具有不同的地址。 如果我们想要自定义一个类的哈希值,可以在类中实现`__hash__()`方法。这个方法应该返回一个整数,用于表示对象的哈希值。 下面是一个简单的示例,展示了自定义类中`__hash__()`方法的使用: ```python class Student: def __init__(self, name, age): self.name = name self.age = age def __hash__(self): # 自定义哈希值为年龄的平方 return self.age ** 2 student1 = Student("Alice", 20) student2 = Student("Bob", 25) print(hash(student1)) # 输出:400 print(hash(student2)) # 输出:625 ``` 在上述示例中,我们定义了一个`Student`类,并在其中实现了`__hash__()`方法,计算哈希值为年龄的平方。通过调用`hash()`函数,我们可以获取对象的哈希值并进行打印。 需要注意的是,如果一个类定义了`__hash__()`方法,那么它也必须定义`__eq__()`方法,用于对象的相等性比较。这是因为哈希值只能用于快速查找,而对象的相等性比较需要通过`__eq__()`方法来确定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值