调用__hash __()方法

时间:2017-03-16 08:50:53

标签: python class methods

我定义了课程MyClass()

import random
class MyClass():
    def __init__(self, value):
        self.value = value
    def __hash__(self):
        return random.randin(1, 10) 
x = MyClass() 

我知道,在我声明__init__后会自动调用x = MyClass()。但是__hash__呢?没有x.__hash__()明确调用它是否有用? 每个以__开头的方法是自动调用还是程序决定何时调用它们? 我经历了很多文档来找到答案但是没有成功。

感谢您的回答!

2 个答案:

答案 0 :(得分:0)

来自Python文档:

  

由内置函数hash()调用,以及对散列集合成员的操作,包括set,frozenset和dict。 __hash __()应该返回一个整数。唯一必需的属性是比较相等的对象具有相同的哈希值;

参考:https://docs.python.org/3/reference/datamodel.html#object.__hash__

另外,请不要从__hash __()返回随机数。

答案 1 :(得分:0)

不,__hash__不会自动调用。看看the documentation for this method

  

由内置函数hash()调用,以及对成员的操作   哈希集合包括set,frozenset和dict。

因此,如果有人hash(x),则会调用此方法。

顺便说一下。返回一个随机数是一个坏主意:

  

唯一需要的属性是比较相等的对象   相同的哈希值