在python学习中,往往你会看到有的名称前面和后面都加上了双下划线,这种写法很特别,到底是什么意思呢?

在python 中由这些名字组成的集合所包含的方法就叫做魔法方法,也叫做特殊方法。今天我们就要讲一些重要的魔法方法,最重要的就是__init__方法。

当一个对象被创建以后,会立即调用构造方法。

创建构造方法:在python中创建一个构造方法很简单,只要把init方法的名字从简单的init修改为魔法版本__init__即可。

一个例子学会所有内容。

代码讲解:定义了一个超类Bird,一个子类SongBird, 超类Bird定义了构造方法__init__是关于hungry特性的。在定义子类的时候构造方法被重写,但是新的构造方法没有任何关于hungry特性的代码。为了达到目的就得必须调用超类的构造方法。

def __init__(self):

self.hungry=True

def eat(self):

if self.hungry:

print ''Aaaah...''

self.hungry=False

else:

print ''No,thanks!''

class SongBird(Bird):

self.sound=''Squawk!''

def sing(self):

print self.sound

>>> b=Bird()

>>> sb=SongBird()

>>> sb.sing()

>>> sb.eat()

Traceback (most recent call last):

File '', line 1, in

File 'C:\Users\xdong\OneDrive - Micron Technology, Inc\python study\prictice\bird_hungry.py', line 6, in eat

AttributeError: ''SongBird'' object has no attribute ''hungry''

相信看了上个例子的小伙伴开始有疑问了,方法重写后,我应该怎么调用超类的构造方法呢?

我们现在要说两种情况教你怎么调用,说这个问题之前,我们先插点题外话,与其说是题外话倒不如说是知识扩展,我们先了解一下老式类和新式类的区别,这个需要看你的python的安装版本是多少,现在大部分都是3.0以上版本了,那么早在之前,以2.2版本为分割线,之前的版本是用的老师类,之后的用新式类。所以根据目前的发展情况,建议大家都用新式类,省的麻烦。

好了,话不多说,回归正题,我们就用老式类和新式类分别讲一下怎么可以直接调用上个例子中的超类Bird的构造方法。

我们先说一下原理,方便你理解。

在调用一个实例的方法时,该方法的self参数会被自动绑定到实例上,但是如果直接调用类的方法,那么就没有实例会被绑定,这样就可以自由地提供需要的self参数。其实这样子也被称为未绑定方法。

上例中,通过将当前的实例作为self参数提供给未绑定方法,SongBird就能够使用其他超类构造方法的所有实现,也就是说属性hungry能被设置。

一般情况下,调用超类的未绑定方法才是版本最好的选择。

既然说到这了,相信眼睛犀利的小伙伴们开始疑问了,那个super是什么东东?别着急,慢慢来!

super函数:主要是应用在新式类。

序列和映射是对象的集合。为了实现它们基本行为,如果对象是不变的,那么久需要两个魔法方法,如果可变的就需要4个。

如果创建一个无穷序列会发生什么?先上代码。

代码解释: start=1,step=2 会得到(1,3,5,7,9,11......)

self.start key*self.step s[4]=1 4*2=9 s[5]=1 5*2=11

python魔法方法好难_一篇干货好文,轻松掌握python魔法方法相关推荐

  1. 想自学Python却不知该如何入门?这篇文章带你轻松入门Python

    以2019年的资料为蓝本,2018年的资料为补充,还参考了一些网上的教程,旨在更好地总结Python基础知识,力求简明扼要,以供实战演练时能够快速查询遗忘的知识点.学一门语言贵在坚持用它,不用就淡忘了 ...

  2. python语言在命名上是什么敏感的_一文轻松掌握python语言命名规范规则

    和C/C++.Java等语言一样,python在命名上也有一套约定俗成的规则,符合规范的命名可以让程序的可读性大大增加,从而使得代码的逻辑性增强,易于自己和其他协作者在以后的拓展中理解代码的意义,从而 ...

  3. python语言命名规则-一文轻松掌握python语言命名规范规则

    和C/C++.Java等语言一样,python在命名上也有一套约定俗成的规则,符合规范的命名可以让程序的可读性大大增加,从而使得代码的逻辑性增强,易于自己和其他协作者在以后的拓展中理解代码的意义,从而 ...

  4. 『Python开发实战菜鸟教程』工具篇:手把手教学使用VSCode开发Python

    文章目录: 0X01:引子 Python学习资料及开发工具介绍 0x02:实操 基于 Conda 的 Python 安装 VSCode 的安装使用 安装 插件管理按钮使用介绍 VSCode 如何管理项 ...

  5. [干货分享]1000篇干货好文!量子技术——资讯篇

    1000篇干货好文!量子技术--入门篇  https://bbs.aliyun.com/read/581500.html     1000篇干货好文!量子技术--进阶篇  https://bbs.al ...

  6. 1000篇干货好文!量子技术——进阶篇

    阅读原文 1000篇干货好文!量子技术--入门篇  https://bbs.aliyun.com/read/581500.html    1000篇干货好文!量子技术--进阶篇  https://bb ...

  7. 1000篇干货好文!量子技术——专家观点篇

    1000篇干货好文!量子技术--入门篇  https://bbs.aliyun.com/read/581500.html     1000篇干货好文!量子技术--进阶篇  https://bbs.al ...

  8. python入门容易精通难_我珍藏的一些好的Python代码,技巧

    最近后台关注的粉丝越来越多,大部分其实还是偏入门和基础!很多小伙伴加了菜鸟学Python小助手的微信,有一些在问一些入门的问题,有一些在问如何学习Python. 其实Python是入门容易精通难,大家 ...

  9. python教程app攻略_一篇清晰易懂的Python操控手机APP攻略!

    阅读全文大概需要 9 分钟. 最近由于一直处于在家远程办公状态,新的一年,很多公司.部门事情要处理,比较忙,公号原创文的创作速度明显减慢!亲爱的读者们,你们都等着急了吧. 最近经常看到许多公号在推一些 ...

最新文章

  1. fastdfs java client_fastdfs-client-java操作fastdfs5.0.4
  2. SQL Server Window Function 窗体函数读书笔记二 - A Detailed Look at Window Functions
  3. MySQL查询的进阶操作--子查询(内查询)
  4. Linux备份MySQL xshell_linux shell脚本备份mysql数据库
  5. go支持对函数返回值命名,可以解决函数返回值的顺序书写问题
  6. 学习 sentry 源码整体架构,打造属于自己的前端异常监控SDK
  7. FineReport 11.0 全新大屏模式,打开3D视界,大屏制作更快
  8. 未来 10 年,物联网将成为主流!
  9. vue中input多选_vue.js动态添加删除文本框input、下拉框select、单选radio、多选checkbox的方案。...
  10. Appium原理及使用
  11. VB6各类源码开源 - 开源研究系列文章
  12. 【建议收藏】 11个适合程序员逛的在线社区
  13. 互联网吞噬传统书店:全球大批书店倒闭
  14. 深度整形外科:使用手绘草图进行鲁棒且可控的图像编辑
  15. 如何禁用计算机的服务,怎么关闭掉电脑中的哪些无用服务
  16. Scheduling
  17. 手把手教你webpack3(14)HMR模块热加载
  18. 腾讯+字节+阿里面经真题汇总,总结到位
  19. 计算机的应用软件在哪里,电脑软件卸载在哪里
  20. MAC安装USB转串口驱动

热门文章

  1. ESP32片上模数转换ADC精度简单测试方案及测试数据分享
  2. 【更新】北京、广东、吉林重名数量查询工具,给孩子起名重名查询
  3. XDR3020 WiFi6 11ax使用体验 11ax性能数据
  4. Qt中rcc工具简介
  5. 2019.2.14 t3 车辆销售
  6. 深度解析HashMap
  7. js面向对象小结(工厂模式,构造函数,原型方法,继承)
  8. Hacking PostgreSQL
  9. 为IT基础设施提供云端储存,云数据存储公司Nasuni获3800万美元股权融资
  10. CocoaPosd使用详解