Python的“魔术方法”是真正的方法吗?

时间:2019-09-19 19:03:13

标签: python object methods

我知道如何在python中使用魔术方法,但我想了解更多有关它们的信息。

为此,我想考虑三个示例:

1)__init__

我们在大多数类的开头将其用作构造函数。如果这是一种方法,那么与之关联的对象是什么?是用于生成所有其他对象的基本python对象吗?

2)__add__ 我们使用它来更改运算符+的行为。上面的问题相同。

3)__name__: 它最常见的用法是在这种结构内:if __name__ == "__main__":

将模块作为主程序运行时,返回True。

我的问题是__name__是方法还是变量?如果它是变量,则与之关联的方法是什么。如果这是一种方法,与之关联的对象是什么?

由于我对这些方法不太了解,因此可能无法很好地提出问题。我想了解如何在Python中构造这些方法。

2 个答案:

答案 0 :(得分:2)

  • __init__不是的构造函数;它是一个初始化器,通常会自动在__new__的返回值上调用(该返回值是一个构造器)。

    x = Foo()大致等同于

    x = Foo.__new__(Foo)
    Foo.__init__(x)
    
  • x + y等效于x.__add__(y)type(x).__add__(x, y)

  • __name__不是方法;这是一个str值的模块级属性,其中包含当前模块的名称。

答案 1 :(得分:1)

  1. 对象是要实例化的类,也就是Foo中的Foo.__init__(actual_instance)
  2. a + b中,对象为a,表达式等效于a.__add__(b)
  3. __name__是一个变量。它不是一种方法,因为与函式的比较会始终False,因为函式永远不会等于字串