目录:

一、_ _init_ _(self[, ...])

二、_ _new_ _(cls[, ...])

三、_ _del_ _(self)

四、课时41课后习题及答案

说的那么厉害,那什么是魔法方法呢?

(1)魔法方法总是被双下划线包围,例如_ _init_ _()。

(2)魔法方法是面对对象的Python的一切。

(3)魔法方法的“魔力”体现在它们总能够在适当的时候被调用。

**************************

一、_ _init_ _(self[, ...])

**************************

之前我们讨论过 _ _init_ _()方法,说它相当于其它面向对象编程语言的构造方法,也就是类在实例化成对象的时候首先会调用的一个方法。

也许你会问:“有些时候在定义时写_ _init_ _()方法,有些时候却没有,这是为什么呢?”举个例子:

#p12_1.py

classRectangle:"""定义一个矩形类,

需要长和宽两个数据,

拥有计算周长和面积的两个办法。

拥有对象在初始化的时候拥有"长"和"宽"两个参数,

因此需要重写_ _init_ _()方法,因为我们说过,

_ _init_ _()方法是类在实例化成对象的时候首先会调用的一个方法,"""

def __init__(self,x,y):

self.x=x

self.y=ydefgetPeri(self):return (self.x + self.y) * 2

defgetArea(self):return self.x * self.y

>>> #先运行p12_1.py

>>> rect = Rectangle(3,4)>>>rect.getPeri()14

>>>rect.getArea()12

这里需要注意的是,_ _init_ _()方法的返回值一定是None,不能是其它:

>>> classA:def __init__(self):return "A for A - Cup"

>>> cup =A()

Traceback (most recent call last):

File"", line 1, in cup=A()

TypeError:__init__() should return None, not 'str'

所以一般在需要进行初始化的时候才重写__init__()方法。其实,这个__init__()并不是实例化对象时第一个被调用的魔法方法。

***************************

二、_ _new_ _(cls[, ...])

***************************

_ _new_ _()才是在一个对象实例化的时候所调用的第一个方法。它跟其它魔法方法不同,它的第一个参数不是self而时这个类(cls),而其它参数会直接传递给_ _init_ _()方法的。

_ _new_ _()方法需要返回一个实例对象,通常是cls这个类实例化的对象,当然你也可以返回其它对象。

_ _new_ _()方法平时很少去重写它,一般让Python用默认的方案执行就可以了。但是又一种情况需要重写这个魔法方法,就是当继承一个不可变的类型的时候,它的特性就显得尤为重要了。

>>> classCapStr(str):def __new__(cls,string):

string=string.upper()return str.__new__(cls,string)>>> a = CapStr("I love ZWW")>>>a'I LOVE ZWW'

这里返回str.__new__(cls,string)这种做法是值得推崇的,只需要重写我们关注的那部分内容,然后其它的琐碎东西交给Python的默认机制去完成就可以了,毕竟它们出错的几率要比我们自己写小很多。

*********************

三、_ _del_ _(self)

*********************

如果说__init__()和__new__()方法是对象的构造器的话,那么Python也提供了一个析构器,叫做__del__()方法。当对象将要被销毁的时候,这个方法就会被调用。但一定要注意的是,并非del x就相当于自动调用x.__del__(),__del__()方法是当垃圾回收这个对象的时候调用的。举个例子:

>>> classC:def __init__(self):print("我是__init__()方法,我被调用了...")def __del__(self):print("我是__del__()方法,我被调用了...")>>> c1 =C()

我是__init__()方法,我被调用了...>>> c2 =c1>>> c3 =c2>>> delc1>>> delc2>>> delc3

我是__del__()方法,我被调用了...

*******************************

四、课时41课后习题及答案

*******************************

python构造和析构_python魔法方法 构造和析构实例讲解相关推荐

  1. python回测工具_Python爬虫回测股票的实例讲解

    股票和基金一直是热门的话题,很多周围的人都选择不同种类的理财方式.就股票而言,肯定是短时间内收益最大化,这里我们需要用python爬虫的方法,来帮助我们获取一些股票的数据,这样才能更好的买到相应的股票 ...

  2. python逐行写入文件_python逐行读写txt文件的实例讲解

    实例如下所示: # -*-coding:utf-8-*- import os file_obj = open("test2.txt") all_lines = file_obj.r ...

  3. python中readlines函数例子_Python遍历方法readline()和readlines()实例讲解

    在进行Python项目开发(http://www.maiziedu.com/course/python/)中我们需要遍历一个大日志文件,在这个时候我们应该使用readlines()还是readline ...

  4. python消息框设置_Python Tkinter消息框(附带实例讲解)

    在 messagebox 模块下提供了大量工具函数来生成各种消息框,这些消息框的结构大致如图 1 所示. 图 1 消息框的结构 在默认情况下,开发者在调用 messagebox 的工具函数时只要设置提 ...

  5. 零基础入门学习Python(21):魔法方法(1)构造和析构

    零基础入门学习Python(21):魔法方法(1)构造和析构 从这节开始,我们介绍下Python的魔法方法:魔法方法总是被双下划线包围. 之前有提到过初始化的魔法方法__init__(),它返回Non ...

  6. python 魔法方法常用_Python魔法方法指南

    有很多人说学习Python基础之后不知道干什么,不管你是从w3c还是从廖雪峰的教程学习的,这些教程都有一个特点:只能引你快速入门,但是有关于Python的很多基础内容这些教程中都没介绍,而这些你没学习 ...

  7. python __reduce__魔法方法_Python魔法方法指南

    (译)Python魔法方法指南 简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法" ...

  8. python魔法方法是什么_Python魔法方法指南(基础)

    什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两个下划线包围来命名的(比如__init__ ,__lt__ ) ...

  9. python魔法方法_Python魔法方法指南

    有很多人说学习Python基础之后不知道干什么,不管你是从w3c还是从廖雪峰的教程学习的,这些教程都有一个特点:只能引你快速入门,但是有关于Python的很多基础内容这些教程中都没介绍,而这些你没学习 ...

最新文章

  1. 网络编程中的锁与队列
  2. JZOJ 1319. 邮递员
  3. [网络安全提高篇] 一〇五.SQL注入之揭秘Oracle数据库注入漏洞和致命问题(联合Cream老师)
  4. webkit中对incomplete type指针的处理技巧
  5. 前端学习(3222):函数式组件使用props
  6. 避坑:一次离奇性能故障的排查与反思
  7. numpy随机生成01矩阵_Python数据分析Numpy库常用函数详解,提到循环就该想到的库...
  8. 在O(1)的时间删除链表结点
  9. php开发技术规范怎么写,PHP开发技术规范!(2)
  10. ALtera DE2开发板学习04
  11. 管家婆 凭证查找 Date exceeds maximum of 19-12-31 报错解决办法
  12. c/c++进制转换方法汇总(含全部代码)
  13. 老师用计算机教我们画画拼音,《汉语拼音13 ang eng ing ong》第三课时教学设计...
  14. 人工智能也存在偏见?探究人工智能偏见的识别和管理
  15. VMware虚拟化- vSphere vCenter HA理论与应用
  16. 使用BBED恢复DELETE的数据
  17. oracle ora 02437,给表追加主键-----报错ORA-02437: 无法验证 (DENGCHAO.TEST) - 违反主键
  18. Biological Psychiatry:为精准精神病学定义个体化功能神经解剖
  19. 雨流计数法python程序_雨流计数法及其在程序中的具体实现
  20. 智能手机战火连连,多年的纷争将何时终结?

热门文章

  1. php图片去噪,python 图片去噪的方法示例
  2. 双层lstm每层有自己的权重参数吗_一幅图真正理解LSTM的物理结构
  3. 二分类2x2对角矩阵准确率表达式
  4. 用两个矩阵的点积计算神经网络的迭代次数 2-8
  5. minst0-9对应81-30-3的特征频率曲线
  6. iis php5.3 mysql_Win2008 R2配置IIS7.5+PHP Manager+PHP5.3+Mysql5.5+Wincache
  7. 3.5 梯度校验-机器学习笔记-斯坦福吴恩达教授
  8. 2.5 程序示例--非线性决策边界-机器学习笔记-斯坦福吴恩达教授
  9. 不忘初心helloworld,IMX6入门学习笔记
  10. 电源完整性仿真让电路板更完美