我知道如何在python中使用魔术方法,但我想了解更多有关它们的信息。
为此,我想考虑三个示例:
1)__init__
:
我们在大多数类的开头将其用作构造函数。如果这是一种方法,那么与之关联的对象是什么?是用于生成所有其他对象的基本python对象吗?
2)__add__
我们使用它来更改运算符+
的行为。上面的问题相同。
3)__name__
:
它最常见的用法是在这种结构内:if __name__ == "__main__":
将模块作为主程序运行时,返回True。
我的问题是__name__
是方法还是变量?如果它是变量,则与之关联的方法是什么。如果这是一种方法,与之关联的对象是什么?
由于我对这些方法不太了解,因此可能无法很好地提出问题。我想了解如何在Python中构造这些方法。
答案 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)
Foo
中的Foo.__init__(actual_instance)
a + b
中,对象为a
,表达式等效于a.__add__(b)
__name__
是一个变量。它不是一种方法,因为与函式的比较会始终为False
,因为函式永远不会等于字串