密圈内有好几个同学问我:学习完了Python基础之后,学些什么呢?

看到这个问题之后,我没在考虑学习基础之后学什么,而我在想真的学完了吗?想以前我也是对着w3c对着廖雪峰的网上教程学习了一遍Python,就开始写爬虫了,后来又读了《Python编程》《Python网络数据采集》等好几本书,感觉自己最少是把Python基础学完了。

不过当我看一些开源项目,看到很多的代码我都看不懂,我才慢慢明白,其实我只是处于Python入门阶段,我想大部分人与当时的我一样很迷茫。

从入门到进阶,一个很重要的点就是Python中的魔法方法,今天我就把自己压箱底货:之前学习Python魔法方法时候留下的笔记加工润色一遍送给大家,希望能对大家有用。

魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的。它们经常是两个下划线包围来命名的(比如 __init__/__new__等等),Python的魔法方法是非常强大的。

如果你学习过Java,那你会发现Python中的魔法方法像是Java中的重载,Python中的魔法方法可以理解为:对类中的内置方法的重载,注意这里不是重写。

举个例子,Python中有个比较操作符==用来比较两个变量的大小,而这个操作符是通过内置函数__eq__来实现的,所以我们只需要通过改变这个内置函数代码,就可以改变重新定义这个操作符的行为。

我们定义一个类Word,继承自str类,现需要重新定义该类的操作符==,使这个操作符用来判断两个字符串长度是否相等,而不是通过字母顺序判断两个字符串是否相等。注意该变化只适用于Word类,而不适用于其它类。

再举个例子:Python中的__new__方法是对象实例化时调用的第一个方法,该方法仅读取一个cls参数后再把其他参数都传给用于指明对象初始化行为的__init__方法,也就是说我们可以在一个对象初始化之前进行其他操作,比如检查是否合法等;而另一个方法__del__可以用来销毁对象,定义了对象被垃圾回收的行为,我们可以利用该方法进行资源回收等操作。

我们可以通过重写__new__方法实现一个单例模式,在每次实例化之前检查该对象是否有已有实例。

通过这两个例子相信你已经对Python的魔法方法比较理解了,但是Python中的魔法方法远不止两三个,而在官方文档中,也没有一个比较详细的归纳,所以这里参考译文(点击阅读原文可以直达)做一个简单的汇总,希望大家可以根据这个汇总的表单对其中的魔法方法进行尝试,下次再看到这样的用法也就不足为奇了。

由于版本等问题,以下的表格对译文的内容进行了修改、删减。

以上是关于操作符运算符的方法,我们很少会改变这些魔法方法除非你真的需要改变他们,当然还有一些我们可能会用到的:

1、__str__/__repr__

__str__定义对类的实例调用str()时的行为。而__repr__定义对类的实例调用repr()的行为,这两者的区别就是repr面向机器,str面向人。定义类的输出的时候经常会使用这两个其中的魔法。

2、__getattr__/__setattr__/__del__attr

使用这三个方法你可以随时修改、删除、添加类属性或值,是不是觉得大吃一惊?

Python中魔法函数常用的大体如上,也还有一些没有提到,

小编在这里推荐大家一个资料领取一个月整理的Ptyhon资料,必备爬虫-flask项目-人工智能-数据分析_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

python魔法方法学不懂_Python进阶:Python魔法方法相关推荐

  1. python魔法方法学不懂_Python--魔法方法学习

    1.什么叫魔法方法? 魔法方法:Python解释器自动给出默认的,是可以给你的类增加魔力的特殊方法.如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用 ...

  2. python魔法方法学不懂_深入学习Python之魔法方法

    什么是Python魔法方法 魔法方法就如同它的名字一样神奇,总能在你需要的时候为你提供某种方法来让你的想法实现.魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作 ...

  3. python高阶函数看不懂_Python进阶:高阶函数的详细说明

    这篇文章讲述了Python进阶:高阶函数的详细说明有需要的朋友可以参考 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单 ...

  4. python人工智能方向第三方库_Python进阶-第三方库管理和虚拟环境

    本文为<爬着学Python>系列第十三篇文章. Python能在这几年火起来,靠的不是网上一大片的爬虫和服务器后端知识的应用(本专题就是这样的,这么说真的好吗?不过我们总得认清事实是吧.) ...

  5. python青少年编程教学视频_Python青少年编程魔法课堂(案例+视频教学版)

    第1篇 Python编程基础案例 第1章 使用Python打印简单内容2 1.1 初识Python的IDLE2 1.2 在IDLE中打印"Python真好玩!" 3 1.3 创建及 ...

  6. python查看字符串编码方式_Python字符编码判断方法分析

    本文实例讲述了Python字符编码判断方法.分享给大家供大家参考,具体如下: 方法一: isinstance(s, str) 用来判断是否为一般字符串 isinstance(s, unicode) 用 ...

  7. python测试代码怎么写_python测量代码运行时间方法

    Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > Python 社区有句俗语: "python自己带着电池& ...

  8. python解释器哪一年_Python即Python解释器的发展史

    1989年,Guido开始写Python语言的编译器. 1991年,第一个Python编译器诞生.它是用C语言实现的,并能够调用C语言的库文件.从一出生,Python已经具有了:类,函数,异常处理,包 ...

  9. python求平方根的代码_Python求解平方根的方法

    本文实例讲述了Python求解平方根的方法.分享给大家供大家参考.具体如下: 主要通过SICP的内容改写而来.基于newton method求解平方根.代码如下: #!/usr/bin/python ...

最新文章

  1. 总结xml配置spring-aop声明式事务配置与hibernate报错:** isno active spring和hibernate整合,原因会话工厂去路(到spring不仅仅是bean)错误
  2. 厦门大学计算机学硕复试,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...
  3. MySQL中 Data truncated for column ‘xxx‘解决方法
  4. shell---字体颜色
  5. PID实现水平姿态角控制
  6. 大数据时代中国“破障”
  7. word-wrap长单词与URL地址自动换行
  8. php 中等职业教材,中等职业教育计算机专业系列教材
  9. Mysql数据库知识点归纳汇总
  10. Curling 2.0{
  11. CSS 实现箭头、三角形、旋转的正方体
  12. Java——动态创建一维数组和二维数组
  13. python名片管理系统难点总结_Python学习笔记之名片管理系统
  14. 财务期初开账-科目余额/期初导入/期初数据/期初余额
  15. CSDN日报20170302——《一个想法:成立草根技术联盟对开发人员进行技术定级解决企业员工招聘难问题!》
  16. matlab拟合伽玛曲线,HDR详解 - 伽玛曲线
  17. AJAX之三种数据传输格式详解
  18. linux设置环境变量将动态库加入环境变量步骤
  19. YOLOv5/v8改进主干GhostNetV2系列:首发结合最新NIPS2022华为诺亚的GhostNetV2 架构:引入长距离注意力机制增强廉价操作,构建更强端侧轻量型骨干,打造高效轻量级检测器
  20. 老年高血压案(知老)

热门文章

  1. DM8:达梦数据库定时自动全库备份与删除备份
  2. 大锅乱炖10大H5前端框架
  3. 2019想脱单?这款Python智能化“天气提醒”程序暖心你的小姐姐!
  4. 近百单神秘外卖被送至多地消防队 留言暖心
  5. 【Linux入门】这篇文章带你认识我们常用的 Unix 系统
  6. 使用move_uploaded_file函数报错原因
  7. Hive详细介绍及简单应用
  8. TableStore-什么是表格存储?
  9. java 输入流退出阻塞_退出旋流虚空
  10. 【免费超简单】班级专用抽奖点名系统支持语音报名等老师再也不用担心上课没趣味了