我定义了课程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__()
明确调用它是否有用?
每个以__
开头的方法是自动调用还是程序决定何时调用它们?
我经历了很多文档来找到答案但是没有成功。
感谢您的回答!
答案 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)
,则会调用此方法。
顺便说一下。返回一个随机数是一个坏主意:
唯一需要的属性是比较相等的对象 相同的哈希值