我正在学习Python,而我在理解主题class
方面遇到了麻烦,所以
我想问一些问题
hash()
和__hash__()
之间的区别是什么?__init__()
中定义函数(例如class
)时,它们是自动调用还是需要显式调用它们?class
中,定义保留函数(def __hash__():
)和我自己的函数(def foo():
)有区别吗?谢谢!
答案 0 :(得分:1)
通过不同的机制间接调用特殊方法(有时称为魔术方法),例如__hash__
和__new__
。
例如,如果您在类Foo上定义了__hash__
并且实例化了该类的对象foo:
hash(foo)
将调用您的__hash__
方法。
另一个例子是__new__
和__init__
Foo()
间接调用您班级中定义的__new__
和__init__
。
它将首先调用__new__
,它应该返回一个实例,__init__
方法处理初始化您的实例并返回None。您很少需要在类上实现__new__
,除非您想以某种方式覆盖实例创建过程,这通常在定义元类或重写不可变类型时完成。
其他类型的特殊方法用于运算符重载,例如__eq__
foo==bar
将使用bar参数间接调用__eq__
的定义。