[英]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
值的模块级属性,包含当前模块的名称。
Foo
Foo.__init__(actual_instance)
中的 Fooa + b
中 object 是a
,表达式等价于a.__add__(b)
__name__
是一个变量。 它不能是一种方法,因为与字符串的比较总是False
因为 function 永远不会等于字符串
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.