1、__ init__():所有类的超类object,有一个默认包含pass的__ init ()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对象属性就不会被初始化,虽然我们仍然可以对其进行赋值,但是它已经成了隐式的了,编程时显示远比隐式的更好,看下面的小栗子:
我们可以通过vars函数获知显示声明的属性,但是隐式的就无法获知了,这并不值得提倡,但是在知道参数的情况下我们还是可以对其进行赋值的,如下:
不论怎么样,显示的初始化属性是一个好习惯。2、
str__():直接打印对象的实现方法,__ str__是被print函数调用的,一般都是return一个什么东西,这个东西应该是以字符串的形式表现的。如果不是要用str()函数转换,我们可以直接print的对象都是实现了__ str__这个方法的,比如dict。看下面的例子。
__ str__是dict其中的一个方法,这个方法的实现赋予了它直接被print的能力,知道这些,我们就可以给自己的类定义这个方法使其可以print了,例子如下:
但是这个函数返回值必须为string,否则会抛异常:
3、__ new__():在object类中存在一个静态的__ new__(cls, *args, **kwargs)方法,该方法需要传递一个参数cls,cls表示需要实例化的类,此参数在实例化时由Python解释器自动提供,__ new__方法必须有返回值,且返回的是被实例化的实例,只有在该实例返回后才会调用__ init__来进行初始化,初始化所用的实例就是__ new__返回的结果,也就可以认为是self,我们来看下面的例子:可以看到,在实例化时候,先执行__ new__再执行__ init__,而且python会自动传入我们希望实例化的类,的这里我们显示的调用了object的__ new__,也可以调用其他的父类的__ new__,那么如果我们定义了__ new__,但是并没有返回一个本身实例,会发生什么事呢?例子如下:可以看到本身的__ init__函数并未被调用,而是调用了str的__ init__,可能这样并不直观,那么换一个实例返回,如下:这个就比较明显了,另一个实例的__ init__被调用了。4、__ unicode__():__ unicode__()方法是在一个对象上调用unicode()时被调用的。因为Django的数据库后端会返回Unicode字符串给model属性,所以我们通常会给自己的model写一个__ unicode__()方法。如果定义了__ unicode__()方法但是没有定义__ str__()方法,Django会自动提供一个__ str__()方法调用 __ unicode__()方法,然后把结果转换为UTF-8编码的字符串对象,所以在一般情况下,只定义__ unicode__()方法,让 Django来处理字符串对象的转换,看一个小栗子:在django中,虽然没有定义__ str__,但是django会将__ unicode__转为了str,当然你调用unicode更加是没有问题的。5、__ call__():对象通过提供call()方法可以模拟函数的行为,如果一个对象提供了该方法,就可以像函数一样使用它,还是用例子进行说明。可以看到,我们在像使用函数一样使用类,实在是很有意思的事。6、__ len__():len调用后会调用对象的__ len__函数,我们可以为其定制输出,如下例子:但是该函数要求我们返回的值必须为int,否则会报错,如下:7、__ repr__():函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式,某对象没有适于人阅读的解释形式的话,str() 会返回与repr(),所以print展示的都是str的格式。例子:8、__ setattr__():该函数可以设置函数的属性,文字不知怎么描述,直接上例子:从上例可以看出,__ setattr__函数可以支持对象增加属性,我们可以有计划的修改增加属性的内容。9、__ getattr__()获取对象属性,只有在属性没有找到的时候调用,还是看例子:第一个属性可以找到,所以不会调__ getattr__,第二个属性找不到,所以会调用到。10、__ getattribute__():该函数和上面介绍的__ getattr__很像,都是获取属性,但是__ getattr__是在属性不存在时被调用,而__ getattribute__是无条件被调用,这样会方便我们做一些控制,需要注意,一旦定义了__ getattribute__,则__ getattr__不再会被调用,除非显式调用,例子如下:11、__ delattr__():本函数的作用是删除属性,实现了该函数的类可以用del 命令来删除属性,下面还是看个例子。12、__ setitem__():该函数可以给对象赋值,我们可以以下标的方式对其进行操作,下面看个例子。13、__ getitem__():与上函数相反,__ getitem__可以使对象支持已下标的方式获取值,例子如下:这一类魔法函数对我们来说最大的好处是可以增加代码的优雅程度,并且可以方便的进行流程的控制,上面的例子,我们向操作字典一样在操作一个对象,并且在赋值与取值时都进行了变更,实在是比较好玩。14、__ delitem__():该函数支持以下标方式删除对象数据,实现了这三个函数,这个类就像字典一样,具备了基本的增删查功能,有时候这样写会很方便。15、__ iter__():只要定义了__ iter__()方法对象,就可以使用迭代器访问,这意味着,我们可以迭代我们自己定义的对象,例子如下。16、__ del__():这可以说是一个析构器,或者回收器,在对象引用数降到0时执行,有时可能还需要等一会再执行,所以一般不推荐使用,但是在代码中我们偶尔可以用它来实现一些必须要做的,但是并不紧急的事,下面是个例子。可以看到,在对象不再被引用后,会运行__ del__函数。

16个python常用魔法函数相关推荐

  1. python常用魔法函数

    1.__init__(): 所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对 ...

  2. python 魔法函数 运行时_16个python常用魔法函数

    ==,is的使用 ·is是比较两个引用是否指向了同一个对象(引用比较). ·==是比较两个对象是否相等 1.__ init__(): 所有类的超类object,有一个默认包含pass的__ init ...

  3. python常用函数-python常用魔法函数

    1.__init__(): 所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对 ...

  4. python常用导入函数及其他操作备忘录

    python常用导入函数及其他操作备忘录 python常用导入函数 解压缩zip并读取csv文件 查看缺失值 权重系数取绝对值后排序(查看特征权重重要度) python常用导入函数 from IPyt ...

  5. 零基础学python:魔法函数都有了解吗

    python中常见的内置类型 什么是魔法函数? python的魔法函数总被双下划线包围,它们可以给你的类增加特殊的方法.如果你的对象实现了这些方法中的一个,那么这个方法就会在特殊情况下被调用,你可以定 ...

  6. gj3 Python数据模型(魔法函数)

    3.1 什么是魔法函数 类里面,实现某些特性的内置函数,类似 def __xx__(): 的形式. 不要自己定义XX,并不是和某个类挂钩的 class Company(object):def __in ...

  7. python中魔法函数_Python魔法函数

    python中定义的以__开头和结尾的的函数.可以随意定制类的特性.魔法函数定义好之后一般不需要我们自己去调用,而是解释器会自动帮我们调用. __getitem__(self, item) 将类编程一 ...

  8. python 的魔法函数

    魔法函数简介 魔法函数是 python 语言的一大特色,魔法函数能增强类的类型,并且可以扩展类的行为.比如新声明的一个类是不能被迭代的,但是我们可以通过增加 __getitem__ 或 __iter_ ...

  9. python中魔法函数_02 python中魔法函数

    什么是魔法函数 简单的说,python中的魔法函数,就是以双下划线开头和双下划线结尾的函数,在类中定义后python解释器会执行.所以我们可以根据自己的场景需要使用不同的魔法函数 一个小实例假如我们想 ...

最新文章

  1. XCode5中新建工程后强制使用了ARC,如何去掉?
  2. linux shell awk 单引号分割
  3. 前端- jquery- 总结
  4. 吕布流水账 -- 纪念我的爱情
  5. 利用Runtime类,来操作电脑关机。。
  6. 兼容性好的overflow CSS清除浮动一例
  7. win10系统,在安装masm32的时候出现DELETE operation of EXE file has failed 解决方案
  8. 画面风格写实的5z20
  9. iOS 很酷的动画效果
  10. 【软件】强大的EPWING格式的日语词典
  11. C# 实现Windows Media Encoder音视频捕捉
  12. python编程100例海绵宝宝-Python_Turtle库画一只派大星
  13. 机器学习分类算法之支持向量机
  14. 36. 有效的数独(技巧)
  15. fastjson 是反射吗_6种超声检测灵敏度,你都知道吗?
  16. JDK源代码以及200多部软件著作中出现的以连字符构造的1011个合成词
  17. bat表白脚本(变色桃心+vbs问答)
  18. django项目manage.py指定IP和端口
  19. Nsight compute远程连接不上
  20. 5.4 数据检验(数据一致性处理)

热门文章

  1. 谷歌浏览器自动打印并关闭当前页
  2. linux swap分区修复,(解决后追加50分)linux top 可以看到swap分区, df -h又看不到,这样的结果是否正常?...
  3. 高效协同企业网盘为团队协同带来更高的效率
  4. JAVA计算机毕业设计紫陶文化传播与学习交流网站Mybatis+源码+数据库+lw文档+系统+调试部署
  5. 成为音频专家从音频工程学校培训
  6. netty——黏包半包的解决方案、滑动窗口的概念
  7. 398. 随机数索引
  8. 基于ResNet50的CIFAR10分类
  9. 词云wordcloud
  10. 生物特征识别中的Gabor滤波器