_是什么意思__init__属于魔法函数的一种 , 让我们来看一下它的前世今生吧 。后面介绍了其他的魔法函数:__ str__()、__ new__()、__ unicode__()、__ call__()、__ len__()、__repr__()等等
所谓魔法函数(Magic Methods),是Python的一种高级语法,允许你在类中自定义函数(函数名格式一般为__xx__),并绑定到类的特殊方法中 。比如在类A中自定义__str__()函数,则在调用str(A())时,会自动调用__str__()函数,并返回相应的结果 。在我们平时的使用中,可能经常使用__init__函数(构造函数)和__del__函数(析构函数),其实这也是魔法函数的一种 。
Python中以双下划线(__xx__)开始和结束的函数(不可自己定义)为魔法函数 。
调用类实例化的对象的方法时自动调用魔法函数 。
在自己定义的类中,可以实现之前的内置函数 。
Python中常见魔法方法介绍魔法方法(Magic Methods)是Python中的内置函数python%魔法函数,一般以双下划线开头和结尾,例如__init__、__del__等 。之所以称之为魔法方法,是因为这些方法会在进行特定的操作时会自动被调用 。
在Python中,可以通过dir()方法来查看某个对象的所有方法和属性 , 其中双下划线开头和结尾的就是该对象的魔法方法 。以字符串对象为例:
可以看到字符串对象有__add__方法,所以在Python中可以直接对字符串对象使用" "操作,当Python识别到" "操作时,就会调用该对象的__add__方法 。有需要时我们可以在自己的类中重写__add__方法来完成自己想要的效果 。
我们重写了__add__方法,当Python识别" "操作时,会自动调用重写后的__add__方法 。可以看到 , 魔法方法在类或对象的某些事件出发后会自动执行,如果希望根据自己的程序定制特殊功能的类 , 那么就需要对这些方法进行重写 。使用魔法方法,我们可以非常方便地给类添加特殊的功能 。
1、构造与初始化
__ new __、__ init __这两个魔法方法常用于对类的初始化操作 。上面我们创建a1 = A("hello")时,但首先调用的是__ new __;初始化一个类分为两步:
a.调用该类的new方法,返回该类的实例对象
b.调用该类的init方法,对实例对象进行初始化 。
__new__ (cls, *args, **kwargs)至少需要一个cls参数,代表传入的类 。后面两个参数传递给__ init __。在__ new __可以决定是否继续调用__ init __方法,只有当__ new __返回了当前类cls的实例,才会接着调用__ init __。结合__ new __方法的特性,我们可以通过重写__ new __方法实现Python的单例模式:
可以看到虽然创建了两个对象,但两个对象的地址相同 。
2、控制属性访问这类魔法
方法主要对对象的属性进行访问、定义、修改时起作用 。主要有:
__getattr__(self, name): 定义当用户试图获取一个属性时的行为 。
__getattribute__(self, name):定义当该类的属性被访问时的行为(先调用该方法,查看是否存在该属性 , 若不存在,接着去调用getattr) 。
__setattr__(self, name, value):定义当一个属性被设置时的行为 。
当初始化属性时如self.a=a时或修改实例属性如ins.a=1时本质时调用魔法方法self.__ setattr __(name,values)python%魔法函数;当实例访问某个属性如ins.a本质是调用魔法方法a.__ getattr __(name)
3、容器类操作
有一些方法可以让我们自己定义自己的容器,就像Python内置的List,Tuple,Dict等等python%魔法函数;容器分为可变容器和不可变容器 。
如果自定义一个不可变容器的话,只能定义__ len__ 和__ getitem__ ;定义一个可变容器除了不可变容器的所有魔法方法,还需要定义__ setitem__ 和__ delitem__ ;如果容器可迭代 。还需要定义__ iter __ 。
__len__(self):返回容器的长度
__getitem__(self,key):当需要执行self[key]的方式去调用容器中的对象 , 调用的是该方法
__setitem__(self,key,value):当需要执行self[key] = value时,调用的是该方法
__iter__(self):当容器可以执行 for x in container: , 或者使用iter(container)时,需要定义该方法
下面举一个例子 , 实现一个容器 , 该容器有List的一般功能,同时增加一些其它功能如访问第一个元素,最后一个元素,记录每个元素被访问的次数等 。
这类方法的使用场景主要在python%魔法函数你需要定义一个满足需求的容器类数据结构时会用到,比如可以尝试自定义实现树结构、链表等数据结构(在collections中均已有) , 或者项目中需要定制的一些容器类型 。
魔法方法在Python代码中能够简化代码,提高代码可读性 , 在常见的Python第三方库中可以看到很多对于魔法方法的运用 。
因此当前这篇文章仅是抛砖引玉,真正的使用需要在开源的优秀源码中以及自身的工程实践中不断加深理解并合适应用 。
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() 。
以上就是魔法函数的基本使用方法 。常见的魔法函数我们可以使用dir()函数来查看 。
输出结果为:
【python%魔法函数 python魔法函数】 上述结果中形式为‘__函数名__’的函数为魔法函数,注意有些对象也是这种形式 , 例如__class__, __module__等, 这些不是魔法函数 。具体的魔法函数说明可以参考Python官方说明文档 。
以上代码在Python3.6运行通过.
python:matplotlib,魔法函数%matplotlib notebook,plot里style='k--o'是什么意思呢?知乎自己看网页链接:
matplotlib的plot函数接受一组X和Y坐标 , 还可以通过color、marker和linestyle关键字传入指定的颜色、标记和线型,或者用一个表示颜色、标记和线型的格式字符串替代,两种方法是等效的 。格式字符串中color、marker和linestyle可以任意排列,如'ko--','k--o','o--k'
关于python%魔法函数和python魔法函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- js如何调用cmd,js如何调用function函数
- erp系统都包含什么,erp系统都包括什么
- 传文件阿里云服务器,阿里云服务器会泄露文件吗
- 南京日志怎么去水印小程序,南京日志怎么去水印小程序上传
- 颜色数字代码java 颜色数字代码rgb
- gis间隔和台数,gis量距离按钮在哪
- u盘系统要什么,u盘系统需要多大内存
- 张腾直播平台,张腾直播平台有哪些
- vb.net语句换行符 vbs 换行符