也许上一篇博文提到的property内置函数的用法你还觉得记忆犹新,那么有没有更多的类似的方法呢?有的,就是本篇文章要说的魔法方法

魔法方法

1.什么是魔法方法

(其实前面已经提到多次,每次我都是说暂且不谈,后面会提到,在这里终于填坑了)

总是被双下划线包围的方法,比如__init__

魔法方法是面向对象的python的一切。有句话叫“如果你不清楚魔法方法,那么你还没能意识到面向对象的python的强大”

所以在python中,魔法方法是很重要的

2.为什么叫魔法方法:

在于魔法方法的“魔力”,体现在他们总能够在适当的时候自动调用

3.哪些是魔法方法

有很多,最基本的就是__init__,__new__,__del__,这些。并且魔法方法可以自定义(关于如何如何自定义魔法方法后面的章节里有,这里暂且不谈)

上面三个魔法方法就是今天的主角:

__init__(self[,……])

这个魔法方法应该不陌生,前面几个章节一直在用的。但是有个问题,注意看下面的例子:

怎么报错了?之前是不是自以为很了解__init__了,但是它居然有不为人知的一面对吧?居然报错了,啥原因呢?

我们先看一个正常的例子:

这个是我们熟悉的用法对吧?没有像刚才那样报错,也没有返回什么东西。到底为啥,在上面的报错信息里已经给出答案了:

意思是__init__()调用时,应该返回一个空值,而不是一个字符串类型。换句话就是__init__返回必须是None,不能是其他任何对象。

再上面那个正常的例子,因为b=B()这个步骤表示,B类对象实例化给b对象时,由于会自动调用__init__,看例子里没有任何返回,也就是None的。所以现在应该看懂了吧

__new__(cls[,……])

  • __new__继承自object类
  • __new__至少要有一个参数cls,即要实例化的类,此参数在实例化时由Python解释器自动提供
  • __new__必须得返回实例化出来的实例

例:

注意标记出来的返回的写法

__del__(self)

 __del__是python中的垃圾回收机制的体现

直接上例子:

注意:

  • del 不等于  __del__ 
  • 只有当所有变量对__init__(self)的引用都被del之后才会启动垃圾回收机制,垃圾回收机制销毁对象时,才会自动调用__del__(self)

上面的几个魔法方法都说得很浅显,例子也很简单,所以看不出具体的用法,相信你看完也不是很懂,放心,后面的章节都会围绕魔法方法来讲,后面还会用到这几个魔法方法的。而本篇博文只是作为对魔法方法的了解,后面才是真正的进入魔法方法。

洗礼灵魂,修炼python(37)--面向对象编程(7)—了解魔法方法的更多相关文章

  1. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  2. Python之面向对象编程学习

    不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...

  3. Python:面向对象编程3 定制类(有更新)

    Python:面向对象编程3  定制类(有更新) ⚠️本文主要内容为对Data model相关知识点的提取学习记录.(内容来自文档和部分网页教程案例) ⚠️:这个连接指向<流畅的python&g ...

  4. python中的魔术属性与魔法方法

    1.魔法属性 · 1.1__doc__魔法属性  表示类的描述信息 class Fo: """ 这是今天第一个魔术属性__doc__""" ...

  5. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  6. python之面向对象编程

    1.面向对象介绍: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种类 只要是对象,就肯定有属性 2. 面向对象的几个特性: class类: 一个类即对一类拥有相同属性的对象的抽象, ...

  7. python(8):面向对象编程

    有三种程序类型: (1)面向过程:按照一定的逻辑顺序,一步步垒代码 (2)面向函数:对用常用的计算,建立函数避免重复 (3)面向对象: 函数的集合,对函数进行分类和封装 (一) 抽象 抽象: 哈巴狗, ...

  8. Python(面向对象编程—1)

    class tst: l=[] x=1 a=tst() b=tst() a.l.append('a') b.l.append('b') a.x='a' b.x='b' print(a.l,a.x) # ...

  9. python的面向对象编程

    面向对象编程是一种程序的范式,它把程序看成是对不同对象的相互调用,对现实世界建立的一种模型. 面向对象编程的基本思想,类和实例.类用于定义抽象对象,实例根据类的定义被创建出来. 在python当中我们 ...

  10. 一文看懂Python的面向对象编程

    之前在网络上看了很多关于面向对象的编程详解,还是不够过瘾,所以决定自己动手写一篇. 面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计. 类(Class) ...

随机推荐

  1. jvm-class文件简介

    jvm全称 java virtual machine (java虚拟机),也就是在计算机上再虚拟一个计算机,它存在于计算机内存中并运行在操作系统之上的. javap -v class文件名 > ...

  2. 如何用java POI将word中的内容导入到mysql数据库中

    由于作业需要,要求我们将word文档中的数据直接导入到mysql中,在网上找了很常时间,终于将其解决. 由于比较初级,所以处理的word文档是那种比较规范的那种,条例比较清晰,设计的思路也比较简单,就 ...

  3. python 牛客网 你的输出为:空。请检查一下你的代码,有没有循环输入处理多个case。问题解决

    你的输出为:空.请检查一下你的代码,有没有循环输入处理多个case.点击查看如何处理多个case 核心:他这个程序测试正确与否的流程是 连续输入多组测试数据进行测试,只有每组数据都对才行 所以必须使用 ...

  4. list源码1(参考STL源码--侯捷):list节点、迭代器、数据结构

    list源码1(参考STL源码--侯捷):list节点.迭代器.数据结构 list源码2(参考STL源码--侯捷):constructor.push_back.insert list源码3(参考STL ...

  5. SQL Server性能优化(14)索引碎片

    一. 外部碎片和内部碎片的概念 碎片的概念和检测,参考MSDN:https://msdn.microsoft.com/zh-cn/library/ms189858.aspx 二.对于碎片的解决办法 解 ...

  6. js判断客户端是pc还是手机及获取浏览器版本

    //判断是pc还是移动端 function browserRedirect() { var sUserAgent = navigator.userAgent.toLowerCase(); var bI ...

  7. 从零开始学 Web 之 HTML5(二)表单,多媒体新增内容,新增获取操作元素,自定义属性

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  8. unity5.5 ugui使用美术字

    文件转载自:http://www.jianshu.com/p/a4e6d1ca3ca0 项目需要使用美术字加强战斗效果表现,按以往NGUI的使用经验,这个应该很简单,随便Google一下都有数篇技术博 ...

  9. Windows环境下安装RocketMQ

    一.预备环境1.系统 Windows 2. 环境 JDK1.8.Maven.Git 二. RocketMQ部署1.下载1.1地址:http://rocketmq.apache.org/release_ ...

  10. Go 语言实践(一)

    本文由Austin发表 指导原则 我们要谈论在一个编程语言中的最佳实践,那么我们首先应该明确什么是"最佳".如果您们听了我昨天那场讲演的话,您一定看到了来自 Go 团队的 Russ ...