python构造和析构_python魔法方法 构造和析构实例讲解
目录:
一、_ _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魔法方法 构造和析构实例讲解相关推荐
- python回测工具_Python爬虫回测股票的实例讲解
股票和基金一直是热门的话题,很多周围的人都选择不同种类的理财方式.就股票而言,肯定是短时间内收益最大化,这里我们需要用python爬虫的方法,来帮助我们获取一些股票的数据,这样才能更好的买到相应的股票 ...
- python逐行写入文件_python逐行读写txt文件的实例讲解
实例如下所示: # -*-coding:utf-8-*- import os file_obj = open("test2.txt") all_lines = file_obj.r ...
- python中readlines函数例子_Python遍历方法readline()和readlines()实例讲解
在进行Python项目开发(http://www.maiziedu.com/course/python/)中我们需要遍历一个大日志文件,在这个时候我们应该使用readlines()还是readline ...
- python消息框设置_Python Tkinter消息框(附带实例讲解)
在 messagebox 模块下提供了大量工具函数来生成各种消息框,这些消息框的结构大致如图 1 所示. 图 1 消息框的结构 在默认情况下,开发者在调用 messagebox 的工具函数时只要设置提 ...
- 零基础入门学习Python(21):魔法方法(1)构造和析构
零基础入门学习Python(21):魔法方法(1)构造和析构 从这节开始,我们介绍下Python的魔法方法:魔法方法总是被双下划线包围. 之前有提到过初始化的魔法方法__init__(),它返回Non ...
- python 魔法方法常用_Python魔法方法指南
有很多人说学习Python基础之后不知道干什么,不管你是从w3c还是从廖雪峰的教程学习的,这些教程都有一个特点:只能引你快速入门,但是有关于Python的很多基础内容这些教程中都没介绍,而这些你没学习 ...
- python __reduce__魔法方法_Python魔法方法指南
(译)Python魔法方法指南 简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法" ...
- python魔法方法是什么_Python魔法方法指南(基础)
什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两个下划线包围来命名的(比如__init__ ,__lt__ ) ...
- python魔法方法_Python魔法方法指南
有很多人说学习Python基础之后不知道干什么,不管你是从w3c还是从廖雪峰的教程学习的,这些教程都有一个特点:只能引你快速入门,但是有关于Python的很多基础内容这些教程中都没介绍,而这些你没学习 ...
最新文章
- 网络编程中的锁与队列
- JZOJ 1319. 邮递员
- [网络安全提高篇] 一〇五.SQL注入之揭秘Oracle数据库注入漏洞和致命问题(联合Cream老师)
- webkit中对incomplete type指针的处理技巧
- 前端学习(3222):函数式组件使用props
- 避坑:一次离奇性能故障的排查与反思
- numpy随机生成01矩阵_Python数据分析Numpy库常用函数详解,提到循环就该想到的库...
- 在O(1)的时间删除链表结点
- php开发技术规范怎么写,PHP开发技术规范!(2)
- ALtera DE2开发板学习04
- 管家婆 凭证查找 Date exceeds maximum of 19-12-31 报错解决办法
- c/c++进制转换方法汇总(含全部代码)
- 老师用计算机教我们画画拼音,《汉语拼音13 ang eng ing ong》第三课时教学设计...
- 人工智能也存在偏见?探究人工智能偏见的识别和管理
- VMware虚拟化- vSphere vCenter HA理论与应用
- 使用BBED恢复DELETE的数据
- oracle ora 02437,给表追加主键-----报错ORA-02437: 无法验证 (DENGCHAO.TEST) - 违反主键
- Biological Psychiatry:为精准精神病学定义个体化功能神经解剖
- 雨流计数法python程序_雨流计数法及其在程序中的具体实现
- 智能手机战火连连,多年的纷争将何时终结?
热门文章
- php图片去噪,python 图片去噪的方法示例
- 双层lstm每层有自己的权重参数吗_一幅图真正理解LSTM的物理结构
- 二分类2x2对角矩阵准确率表达式
- 用两个矩阵的点积计算神经网络的迭代次数 2-8
- minst0-9对应81-30-3的特征频率曲线
- iis php5.3 mysql_Win2008 R2配置IIS7.5+PHP Manager+PHP5.3+Mysql5.5+Wincache
- 3.5 梯度校验-机器学习笔记-斯坦福吴恩达教授
- 2.5 程序示例--非线性决策边界-机器学习笔记-斯坦福吴恩达教授
- 不忘初心helloworld,IMX6入门学习笔记
- 电源完整性仿真让电路板更完美