魔法函数python 魔法函数 php

_是什么意思__init__属于魔法函数的一种,让我们来看一下它的前世今生吧 。后面介绍了其他的魔法函数:__ str__()、__ new__()、__ unicode__()、__ call__()、__ len__()、__repr__()等等
所谓魔法函数(Magic Methods),是Python的一种高级语法,允许你在类中自定义函数(函数名格式一般为__xx__),并绑定到类的特殊方法中 。比如在类A中自定义__str__()函数,则在调用str(A())时,会自动调用__str__()函数,并返回相应的结果 。在我们平时的使用中,可能经常使用__init__函数(构造函数)和__del__函数(析构函数),其实这也是魔法函数的一种 。
Python中以双下划线(__xx__)开始和结束的函数(不可自己定义)为魔法函数 。
调用类实例化的对象的方法时自动调用魔法函数 。
在自己定义的类中,可以实现之前的内置函数 。
Python魔法函数(特殊函数) Python中如何实现运算符的重载 , 即实现例如a+b这样的运算符操作呢?
在C++中可以使用 operator 关键字实现运算符的重载 。但是在Python中没有类似这样的关键字,所以要实现运算符的重载,就要用到Python的魔法函数 。Python魔法函数是以双下划线开头,双下划线结尾的一组函数 。我们在类定义中最常用到的 __init__ 函数就是这样一个魔法函数 , 它在创建类对象时被自动调用 。
下面我们来看个简单的例子 。
上述代码示例了几个魔法函数的用法 。__add__函数对应了二元运算符+,当执行a+b语句时,python就会自动调用a.add(b) 。对于上述例子中的v1+v2+v3,则相当于调用了(v1.add(v2)).add(v3) 。
代码中还有一个在Python类定义经常使用的__str__函数 , 当使用str()时会被调用 。print函数对传入的参数都调用了str()将其转换成易读的字符串形式,便于打印输出,因而会调用类定义的__str__函数打出自定义的字符串 。
代码中还有一个特殊的__call__函数,该函数在将对象采用函数调用方式使用时被调用, 例如v1()相当于v1.call() 。

输出结果为:
上述结果中形式为‘__函数名__’的函数为魔法函数 , 注意有些对象也是这种形式,例如__class__, __module__等, 这些不是魔法函数 。具体的魔法函数说明可以参考Python官方说明文档 。
以上代码在Python3.6运行通过.
Python中常见魔法方法介绍魔法方法(Magic Methods)是Python中的内置函数,一般以双下划线开头和结尾,例如__init__、__del__等 。之所以称之为魔法方法,是因为这些方法会在进行特定的操作时会自动被调用 。
在Python中,可以通过dir()方法来查看某个对象的所有方法和属性,其中双下划线开头和结尾的就是该对象的魔法方法 。以字符串对象为例:
可以看到字符串对象有__add__方法,所以在Python中可以直接对字符串对象使用"+"操作,当Python识别到"+"操作时,就会调用该对象的__add__方法 。有需要时我们可以在自己的类中重写__add__方法来完成自己想要的效果 。
我们重写了__add__方法,当Python识别"+"操作时,会自动调用重写后的__add__方法 。可以看到,魔法方法在类或对象的某些事件出发后会自动执行,如果希望根据自己的程序定制特殊功能的类,那么就需要对这些方法进行重写 。使用魔法方法,我们可以非常方便地给类添加特殊的功能 。
1、构造与初始化
__ new __、__ init __这两个魔法方法常用于对类的初始化操作 。上面我们创建a1 = A("hello")时,但首先调用的是__ new __;初始化一个类分为两步:
a.调用该类的new方法,返回该类的实例对象

推荐阅读