繁体   English   中英

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

[英]Python “Magic methods” are realy methods?

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

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

1) __init__

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

2) __add__我们用它来改变操作符+的行为。 上面同样的问题。

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

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

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

由于我对这些方法不是很了解,所以问题可能没有很好地制定。 我想了解这些方法是如何在 Python 中构建的。

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

    x = Foo()大致相当于

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

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

  1. object 是正在实例化的 class,也就是Foo Foo.__init__(actual_instance)中的 Foo
  2. a + b中 object 是a ,表达式等价于a.__add__(b)
  3. __name__是一个变量。 它不能是一种方法,因为与字符串的比较总是False因为 function 永远不会等于字符串

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM