百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

【201017】Python对象编程之构造函数、对象继承

off999 2024-10-25 13:46 27 浏览 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

相关推荐

2010激活密钥(microsoft2010激活密钥)
2010激活密钥(microsoft2010激活密钥)

步骤/方式1officeprofessionalplus2010:(office专业版)6QFdx-pYH2G-ppYFd-C7RJM-BBKQ8Bdd3G-xM7FB-Bd2HM-YK63V-VQFdKVYBBJ-TRJpB-QFQ...

2025-11-19 04:03 off999

联想官方刷新bios工具(联想电脑刷新bios)

刷新BIOS需要使用联想的官方网站或授权维修中心来进行操作。以下是一些基本步骤:1.访问联想的官方网站,找到BIOS更新程序并下载。在下载过程中,请确保选择与您计算机型号匹配的版本。2.将下载的B...

苹果ios14系统下载(苹果ios14.1下载)
苹果ios14系统下载(苹果ios14.1下载)

1方法一步骤/方式一打开Appstore。步骤/方式二在搜索栏点击搜索框。步骤/方式三搜索并点击需要下载的软件。步骤/方式四点击获取。步骤/方式五最后验证ID密码即可。1.在应用商店搜索你要下载的应用名称。2.点击下载按钮,如果要求登...

2025-11-19 03:03 off999

office2010怎么免费永久激活密钥

用这个试试,一个KMS激活工具可以激活2010到2019的Office自家的目前用的就是这个microsoft6477.moe/1716.html直接使用这个Microsoftoffice2010...

类似爱加速的国内ip(类似爱加速的app)
类似爱加速的国内ip(类似爱加速的app)

推荐“V8盒子”。这一款免费无广告的模拟器,不同于其它软件盒子,而是类似于X8沙箱,满足游戏多开,画中画,悬浮球操作,熄屏后台运行等多功能的沙箱盒子.支持一键root,一键安装xposed框架,能在安卓/苹果手机上运行多个安卓/ios虚拟系...

2025-11-19 02:03 off999

阿里旺旺手机客户端(阿里旺旺手机app)

手机淘宝的旺旺在打开商品后,会看到左下角有个旺旺的图标,点击就可以联系了。  阿里旺旺是将原先的淘宝旺旺与阿里巴巴贸易通整合在一起的一个新品牌。它是淘宝和阿里巴巴为商人量身定做的免费网上商务沟通软件,...

最纯净的pe装机工具(pe工具哪个纯净)

U盘装系统步骤:1.制作U盘启动盘。这里推荐大白菜U盘启动盘制作工具,在网上一搜便是。2.U盘启动盘做好了,我们还需要一个GHOST文件,可以从网上下载一个ghost版的XP/WIN7/WIN8系统,...

装一个erp系统多少钱(wms仓库管理软件)

现在主流有客户端ERP和云端ERP两种客户端通常一次买断,价格在万元左右,但是还有隐性费用,你需要支付服务器、数据管理员,此外如果系统需要更新维护,你还需要支付另外一笔不菲的费用。云端ERP:优势...

cad2014序列号和密钥永久(autocad2014序列号和密钥)

1在cad2014中修改标注样式后,需要将其保存2单击“样式管理器”按钮,在弹出的窗口中选择修改后的标注样式,然后单击“设置为当前”按钮,再单击“保存当前样式”按钮,将其保存为新的样式名称3为了...

qq修改密保手机号(qq修改密保手机号是什么意思)

QQ更改绑定的手机号码操作步骤如下:1、打开手机主界面,找到“QQ”软件点击打开。2、输入正确的QQ账户和密码登录到qq主界面。3、点击左上角的头像“图片”,进入到个人中心界面。4、进入到个人中心界面...

dell笔记本客服电话(dell笔记本客服电话人工服务)

戴尔中国的官方网站http://www.dell.com/zh-cn。通过这个网站购买的都没有问题;有问题也可以进入官网联系售后客服,也可以拔打dell电脑说明书上的售后热线,都可以为你解决的。还是建...

联想乐商店app官方下载(联想乐商店在哪下载)

您好!很遗憾!若是您的手机联想乐商店和联想游戏中心只能有流量,建议您核实是否乐安全有限制wifi上网,核实您所使用的wifi是否本身有限制。若还是无效,可清除缓存数据;备份资料恢复出厂设置尝试。欢迎您...

fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
不用拉网线的路由器是真的吗

是真的不插卡不拉线有线就有网,这11个字其实就涵盖了无线路由器的特点,无线路由器免插卡、不用拉网线,完全摆脱了之前家用路由器和网线捆绑的模式,有电就有网,其实说的就是无线路由器的使用操作简单,通电就可...

微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)

取消回复欢迎 发表评论: