在类中自动调用方法

时间:2017-03-11 19:36:47

标签: python class

我正在学习Python,而我在理解主题class方面遇到了麻烦,所以 我想问一些问题

  • hash()__hash__()之间的区别是什么?
  • 当我在__init__()中定义函数(例如class)时,它们是自动调用还是需要显式调用它们?
  • class中,定义保留函数(def __hash__():)和我自己的函数(def foo():)有区别吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

通过不同的机制间接调用特殊方法(有时称为魔术方法),例如__hash____new__

例如,如果您在类Foo上定义了__hash__并且实例化了该类的对象foo:

hash(foo)

将调用您的__hash__方法。

另一个例子是__new____init__

Foo()

间接调用您班级中定义的__new____init__。 它将首先调用__new__,它应该返回一个实例,__init__方法处理初始化您的实例并返回None。您很少需要在类上实现__new__,除非您想以某种方式覆盖实例创建过程,这通常在定义元类或重写不可变类型时完成。

其他类型的特殊方法用于运算符重载,例如__eq__

foo==bar

将使用bar参数间接调用__eq__的定义。