【201017】Python对象编程之构造函数、对象继承
off999 2024-10-25 13:46 35 浏览 0 评论
介绍
介绍
之前我们跟着福哥完成了“做个搜索引擎”项目的前半部分“网页蜘蛛”的程序的编写,童鞋们可以看到福哥将网页蜘蛛的功能封装成为了一个Spider对象,而不是简简单单的写一些函数,更不是直接码代码堆逻辑。大家可以发现在网页蜘蛛的“主程序”里面的代码非常简单,很清爽,很干净,这就是对象编程的优势,我们可以将功能的实现和业务的设计分离开来,在功能代码里只关注功能实现,在业务设计代码里只考虑业务设计,这是对象编程的思维带来的好处,程序员需要培养自己这个思维。
今天我们来学习一下Python语言里面的有个对象编程的一些高级语法,这些内容包括构造函数、析构函数、对象继承、方法重载,掌握这些技巧可以帮助我们设计出更加优美的对象,编写出更加漂亮的代码。
构造函数(Construct)
构造函数就是一个对象在初始化的时候自动被调用的一个函数,我们可以在这个函数里进行对象属性初始化的操作,也可以通过这个函数传递默认参数给我们的对象
python的构造函数使用了特殊的函数名称,即:__init__,使用这个名称定义的对象方法就会被作为对象构造函数使用
示例
可以看到,我们通过构造函数传递了id和name到对象TFMember里,并且将它们赋值给对象属性mId和mName
class TFMember:
mId = None
mName = None
def __init__(self, id, name):
self.mId = id
self.mName = name
def dump(self):
print ("(" + str(self.mId) + ") " + self.mName)
fuge = TFMember(168, "福哥")
fuge.dump()析构函数(Destruct)
析构函数就是一个在对象不再使用的时候(被释放资源之前)自动调用的一个函数,我们可以在这个函数里面关闭一些需要手动释放资源的句柄,例如:pymysql、elasticsearch等等
python的析构函数使用了特殊的函数名称,即:__del__,使用这个名称定义的对象方法就会被作为对象析构函数使用
示例
我们建立了析构函数,在里面打印了一句话,运行程序后,看到这句话的时候证明对象实例fuge就要被释放资源了
class TFMember:
mId = None
mName = None
def __init__(self, id, name):
self.mId = id
self.mName = name
def dump(self):
print ("(" + str(self.mId) + ") " + self.mName)
def __del__(self):
print ("object TFMember for " + str(self.mId) + " is destroy")
fuge = TFMember(168, "福哥")
fuge.dump()对象继承(Extends)
对象继承和我们理解的人类的继承很相似,儿子继承了父亲的DNA,那么儿子会从长相、性格、肤色、智力等等很多方面接近他的父亲,而子对象继承了父对象,那么子对象会拥有父对象的全部属性和方法
示例
我们建立了TFManager对象,这个对象继承了TFMember对象,所以TFManager的实例fuge也会拥有dump方法,也会拥有mId和mName属性
class TFMember:
mId = None
mName = None
def __init__(self, id, name):
self.mId = id
self.mName = name
def dump(self):
print ("(" + str(self.mId) + ") " + self.mName)
def __del__(self):
print ("object TFMember for " + str(self.mId) + " is destroy")
class TFManager(TFMember):
mRank = 0
def __init__(self, id, name, rank):
self.mId = id
self.mName = name
self.mRank = rank
def __del__(self):
print ("object TFManager for " + str(self.mId) + " is destroy")
fuge = TFManager(168, "福哥", 8)
fuge.dump()大家可以看到虽然我们在TFMember和TFManager两个对象里都设置了构造函数和析构函数,但是最后生效的只是TFManager这个对象的构造函数和析构函数
方法重载(Override)
方法重载的意思就是基于对象继承之上的,比方说:一对父子都去做一道西红柿炒鸡蛋,两人都比较喜欢甜口味,但是儿子可能还会放一点盐,这点和父亲不一样。也就是说,儿子的某些能力或者行为与父亲不会完全一样,这时候定义儿子的时候就需要重新定义这种能力或者行为,这种做法在对象编程里叫做方法重载
python的对象方法的重载很自由,只要子对象的方法名称和父对象一样,无所谓函数是否一样都没关系,这样子对象的这个方法就会覆盖父对象的同名方法了
示例1
可以看到我们在TFManager里也定义了dump这个方法,且改变了方法的参数和实现,在fuge这个实例下运行后会发现实现完全是TFManager的逻辑了
class TFMember:
mId = None
mName = None
def __init__(self, id, name):
self.mId = id
self.mName = name
def dump(self):
print ("(" + str(self.mId) + ") " + self.mName)
def __del__(self):
print ("object TFMember for " + str(self.mId) + " is destroy")
class TFManager(TFMember):
mRank = 0
def __init__(self, id, name, rank):
self.mId = id
self.mName = name
self.mRank = rank
def dump(self, type):
if type == 1:
print ("{" + str(self.mId) + "} " + self.mName)
elif type == 2:
print ("[" + str(self.mId) + "] " + self.mName)
else:
print ("(" + str(self.mId) + ") " + self.mName)
def __del__(self):
print ("object TFManager for " + str(self.mId) + " is destroy")
fuge = TFManager(168, "福哥", 8)
fuge.dump(1)
fuge.dump(2)
fuge.dump(3)示例2
现在我们把TFManager的构造函数和析构函数都去掉了,会发现析构函数又变成了TFMember的实现逻辑了,这说明了在子对象里定义构造函数和析构函数也会重载父对象的构造函数和析构函数
class TFMember:
mId = None
mName = None
def __init__(self, id, name):
self.mId = id
self.mName = name
def dump(self):
print ("(" + str(self.mId) + ") " + self.mName)
def __del__(self):
print ("object TFMember for " + str(self.mId) + " is destroy")
class TFManager(TFMember):
mRank = 0
def dump(self, type):
if type == 1:
print ("{" + str(self.mId) + "} " + self.mName)
elif type == 2:
print ("[" + str(self.mId) + "] " + self.mName)
else:
print ("(" + str(self.mId) + ") " + self.mName)
fuge = TFManager(168, "福哥")
fuge.dump(1)
fuge.dump(2)
fuge.dump(3)总结
好了,今天童鞋们跟着福哥学习了python语言的对象编程基础知识:构造函数、析构函数、对象继承、方法重载。掌握了这些技巧之后,大家就可以设计出更为复杂,更为庞大的系统了。对象编程水平的提高是一个漫长的过程,需要在不断的项目开发过程中积累经验,需要在不断是实践当中总结教训,才能一步一步地成为大师的。
https://m.tongfu.net/home/35/blog/512821.html
相关推荐
- 现在哪个浏览器好用(现在哪种浏览器好用)
-
一、谷歌浏览器谷歌浏览器是公认最好用的,这个可以从市场占有率看出端倪,超过三分之二的用户使用谷歌浏览器。Chrome浏览器以简洁快速著称,不管是普通用户还是开发人员,chrome浏览器都是首选。Chr...
- win10系统还是win7系统好(是win10好还是win7好)
-
就我个人觉得win7系统和win10系统都挺好用的,主要看个人习惯,win10系统也推出了3年了,相信很多用户也已经尝试过win10系统,操作上没有什么很大的区别,就是界面有些不同,这就看个人喜欢了。...
- 重装系统u盘制作教程(重装系统u盘怎么制作)
-
以下是重装电脑系统的一般步骤:在正常可用的电脑上下载并安装一个制作启动U盘的工具,例如Rufus、WinToUSB等。使用该工具将操作系统安装文件写入U盘,并设置U盘为启动盘。将U盘插入需要重装系统的...
- 从win8装回win7系统(win8.1怎么装回win7)
-
重装电脑,而且您的【电脑系统没有完全崩溃】,那么可以用【【【硬盘安装系统的方法】】】来装系统,无需借助光盘或者u盘,简单快速。电脑硬盘安装系统的方法如下:1.到WIN7旗舰版基地去http://ww...
- 查看电脑硬件信息的4个技巧
-
1、点击下面任务栏中的windows图标或按键盘windows键打开开始菜单。2、在开始菜单中找到设置或settings,通常是右上角的齿轮按钮。3、然后在设置界面中找到system选项,点击进入。4...
- 老式电脑的显卡在哪里(老式电脑主机显卡在哪)
-
十年前的老电脑没必要了,换新吧,估计接口什么也都有限制了我看了下你这个是品牌电脑,代工板的应该是没有显卡插槽的,有的话也是AGP的,可以去淘片AGPATI9000系列的卡或者6200660...
- word产品密钥2016(word产品密匙2016)
-
word2016激活密钥有两种类型:永久激活码和KMS期限激活密钥。其中,永久激活密钥可以使用批量授权版永久激活密钥进行激活,如所示;而KMS期限激活密钥需要使用KMS客户端密钥进行激活,如所示。另外...
- 如何选择电脑配置(如何选择电脑配置的高低)
-
选择电脑配置时,首先要考虑自己的需求和预算。确定用途(如游戏、办公、设计等),然后选择适合的处理器、内存、显卡、存储和显示器等。处理器要根据性能和功耗进行选择,内存要足够大以支持多任务处理,显卡要根据...
- win10下方任务栏无反应(win10下方任务栏消失)
-
按ctrl+alt+delete键win10系统电脑中,按键盘上的ctrl+alt+delete键2点击任务管理器点击出现窗口选项中的“任务管理器”3点击重新启动打开管理器后,右击Windows资源管...
- win11找不到wifi网络(win11找不到wifi网络图标)
-
原因:可能是缺少了无线网卡驱动。解决方法:1、打开开始菜单,在上方搜索并进入“设备管理器”。2、接着展开网络适配器,找到无线网卡设备,右键选中,点击“更新驱动程序”。3、最后选择“自动搜索驱动程序”,...
- 激活office2013密钥匙(office 2013 激活密钥)
-
这是KMS激活,180天以后需要重新激活。安装在其他路径的话改第二行,第二行的作用就是进入Office15所在目录,所以实际路径是什么就写什么。第三行是KMS服务器IP地址,你写的这个是俄罗斯服务器,...
- 电脑版本低如何更新为最新版本
-
首先说一点:2002年的电脑了,2002年的主板和现在出的部分硬件配不上,如果换主板的话就基本等于重新配置一台新的了;第二点就是非要硬性升级的话很多以前的硬件都不出产了,价格较高,真心不如重新弄一台新...
- 修理电脑(修理电脑一般多少钱)
-
故障一:电脑蓝屏电脑蓝屏算是常见的故障了,其中主要有四个原因。1.内存条接触不良打开机箱将内存条固定,同时对电脑进行除尘操作,这样的做法能够更好的保证电脑运行。若电脑仍然出现蓝屏,则可能是内存条的问题...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
