python面向对象三大基本特性_python面向对象之三大特性

继承

先看个简单的例子了解一下继承。

jia.gif

jian.gif

class Animal: #父类

def __init__(self, name, age, department):

self.name=name

self.age=age

self.department=departmentdefrunning(self):print(‘%s可以奔跑!‘%self.name)class Cat(Animal): #括号里放要继承的父类

def __init__(self, name, age, department, tail):

Animal.__init__(self, name, age, department) #即想使用父类的属性又有自己独有的属性,就在内部调用父类的__init__

self.tail = tail #派生属性

classMouse(Animal):def __init__(self, name, age, department, tail):

super().__init__(name, age, department)#super方法只在python3中有 相当于Animal.__init__(self, name, age, department)

self.tail =tailclassHuman(Animal):def __init__(self, name, age, department):

Animal.__init__(self, name, age, department)def create(self): #派生方法

print(‘%s可以创造!‘%self.name)

cat= Cat(‘Tom‘, 10, ‘猫科‘, ‘蓝色尾巴‘)

mouse= Mouse(‘Jerry‘, 7, ‘鼠科‘, ‘灰色尾巴‘)

human= Human(‘zzy‘, 24, ‘人科‘)print(cat.name) #Tom

print(mouse.tail) #灰色尾巴

cat.running() #Tom可以奔跑!

human.create() #zzy可以创造!

print(Human.mro()) #[, , ]查看继承顺序

print(Human.__bases__) #查看继承的所有父类

继承

通过上面的例子总结一下继承的特性:

"""继承:子类是父类的关系 作用:可以减少代码的重复

通过 类名(父类名) 来进行继承,

一个类可以单继承也可以多继承

一个类可以被单个类继承,也可以被多个类继承

父类中没有而子类中有的属性为 派生属性

父类中没有而子类中有的方法为 派生方法

单继承:

对象调用时,先在子类里找,子类里有一定用子类里的,没有再去父类里面找

多继承:

在新式类中(python3中都是新式类),对象调用查找是按广度查找

新式类,默认继承object

在经典类中,对象调用查找是深度查找

经典类,python2.7创建的默认类,继承object后变为新式类"""

研究一下继承的查找顺序:这里以python3为例

classD:deffunc(self):print(‘d‘)classC(D):deffunc(self):print(‘c‘)classB(D):deffunc(self):print(‘b‘)classA(B, C):deffunc(self):print(‘a‘)

a=A()

a.func()#a A类里有就找A类

#注释掉A类里的func

a.func() #b A类里没有,先从括号中最左边的B类里找

#注释掉B类里的func

a.func() #c B类里没有,判断通过C类也能找到B的父类D,会从C类先找

#注释掉C类里的func

a.func() #d C类里没有,就找父类D

上面的继承顺序可以看出:

"""广度查找:原则就是在没找到时,按继承层级找完每一个父类

深度查找:原则是一条继承线路找到底才会找另外的线路"""

再看下super方法的本质:

classA(object):deffunc(self):print(‘A‘)classB(A):deffunc(self):

super().func()print(‘B‘)classC(A):deffunc(self):

super().func()print(‘C‘)classD(B, C):deffunc(self):

super().func()print(‘D‘)

b=D()

b.func()#打印顺序为 A C B D#super的本质 :不是单纯找父类 而是根据调用者的节点位置的广度优先顺序来的

封装

封装 用于对代码的保护,使类中的隐藏属性和方法只有通过提供的公共访问方式来使用,而不能直接查。

下面写个例子具体看下:

classPerson:__keys = ‘量子编码规则‘ #私有静态属性

def __init__(self, name, password):

self.name=name

self.__password = password #__属性 定义私有属性

def __get_password(self): #__方法 定义私有方法

return self.__password #只能在内部访问

def login(self, name, passwd): #提供公共访问方法

if name == self.name and passwd == self.__get_password():print(‘登陆成功‘)

person= Person(‘zzy‘, ‘zzy123‘)#print(person.__password) # 报错 显示Person类找不到__password#print(person._Person__password) # zzy123 在外部通过 _类名__属性名 也能查看私用属性,但是不能这样用!

person.login(‘zzy‘, ‘zzy123‘) #登陆成功

那子类能否继承父类的私有属性呢?

classFoo:__key = 123

classSon(Foo):print(Foo.__key) #报错 子类不能继承父类的私用属性

多态

"""多态:指一类事物有多种形态,python天生支持多态。

python中推崇鸭子类型,即看起来用起来都很像,但却没有任何约束关系,是一种自我约束行为。比如list和tuple

优点:松耦合,相似类之间不会有任何影响

缺点:自我约束,随意性太强"""

例子

classHoly:defcure(self, HP):

HP+= 100

return ‘血量为%s‘%HPclassDiscipline:defcure(self, HP):

HP+= 100

return ‘血量为%s‘%HPdef cure(obj, HP): #在强数据类型语言中,obj必须要指定数据类型,在Python中就可以是多种形态的

returnobj.cure(HP)#这里的Discipline类和Holy类就很相似,就可以当同一个事物去使用

holy =Holy()

discipline=Discipline()print(cure(holy, 20))print(cure(discipline, 10))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用python做透视表_用Python实现数据的透视表的方法

用Python实现数据的透视表的方法来源:中文源码网 浏览: 次 日期:2019年11月5日【下载文档: 用Python实现数据的透视表的方法.txt 】(友情提示:右键点上行txt文档名->目标另存为)用Python实现数据的透视表的方法在处理数据时&#x…

c语言编程用进退法求搜索区间代码,用c对函数进行优化的问题

//多维无约束优化软件设计#include #include #include double det1e-5; //计算精度double det11e-3; //梯度判断精度double ak3e-3; //搜索步长double dx1e-4; //梯度计算步长/*目标函数(n维)入口参数:x :n维数组,自变量返回值 :函…

python关闭指定浏览器页面_Python自动关闭浏览器关闭网页的方法

在py编辑窗口中输入代码: from selenium.webdriver.chrome.options import Options from selenium import webdriver __browser_url rC:\Users\Administrator\AppData\Roaming\360se6\Application\360se.exe chrome_options Options() chrome_options.binary_loca…

ubuntu 安装kde桌面_在Ubuntu 20.04系统上安装KDE Plasma Desktop的方法

本文介绍在Ubuntu 20.04系统上安装KDE Plasma Desktop的方法。Plasma Desktop是KDE创建的一种流行且功能强大的桌面环境,主要用于Linux系统。KDE Plasma的当前版本是5,它是KDE Plasma 4的后续版本,旨在帮助您以高效的方式完成工作。当Plasma强…

c语言将字母的acsaii,C语言上机实验 答案

《C语言上机实验 答案》由会员分享,可在线阅读,更多相关《C语言上机实验 答案(31页珍藏版)》请在装配图网上搜索。1、实验一 上机操作初步(2学时)一、实验方式:一人一机二、实验目的:1、熟悉VC语言的上机环境及上机操作过程。2、了…

python怎么调用列表_Python中列表的使用

python中的列表与java中的数组非常类似,但使用方法比java中数组简单很多,python中的数据类型不需要显示声明,但在使用时必须赋值,列表元素下标从0开始 初始化列表(初始化一个包含五个元素的列表和一个空列表&#xff0…

videowriter最小的编码格式_cv2.VideoWriter() 指定写入视频帧编码格式

今天用opencv保存的视频文件超级大,被小伙伴们嘲笑,哈哈,原来是视频帧编码格式导致的,这里记录下常用的保存视频编码格式。编码参数:cv2.VideoWriter_fourcc(‘I‘,‘4‘,‘2‘,‘0‘)---未压缩的YUV颜色编码&#xff…

C语言和JAVA可以互相转换吗,求助大神!!!JAVA转换成C语言

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//此处不要看,c应该内置了这个函数,不需要自定义Array.prototype.remove function(val) {var index this.indexOf(val);if (index > -1) {this.splice(index,1);}};//名称:获取当天上班的人//参数&…

windows消息队列C语言,08年计算机二级C语言辅导:vc操作微软消息队列的方法

定义IMSMQQueuePtr qDest; // Represents Destination QueueIMSMQQueueInfoPtr qInfo; //Represents an open instance of the destination queueIMSMQQueueInfoPtr qRead;IMSMQMessagePtr qMsg; //Represents the message初始化qDest NULL;CoInitialize(NULL);try{qInfo.Crea…

jwt重放攻击_【干货分享】基于JWT的Token认证机制及安全问题

一步一步教你基于JWT的Token认证机制实现,以及如何防范XSS攻击、Replay攻击和中间人攻击。文章目录一、几种常用的认证机制1.1 HTTP Basic AuthHTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth…

jquery find 找到frame select_简述jQuery

jQuery 是一个高效、精简并且功能丰富的 JavaScript 工具库。它提供的 API 易于使用且兼容众多浏览器,这让诸如 HTML 文档遍历和操作、事件处理、动画和 Ajax 操作更加简单。一、获取元素jQuery的核心设计思想就是获取元素,然后对其操作;因此…

求中位数中回文数之和C语言,一些算法题及答案

1. 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums [2, 7, 11, 1…

自然哲学的数学原理_物理起源点,牛顿《自然哲学的数学原理》

1687年 英国艾萨克牛顿(Sir Isaac Newton,1643—1727),英国物理学家、数学家、天文学家、自然哲学家和炼金术士。1687年他发表《自然哲学的数 学原理》,阐述了万有引力和三大运动定律,奠定了此后三个世纪里力学和天文学的基础&…

如何将另外一个表里的数据与联动_跨境电商(亚马逊)后台财务数据包

亚马逊后台的财务数据包是刚进这个行业的财务人员最希望能了解熟悉的,这块也是相对于国内财务比较有难度的内容,主要难点是亚马逊平台是新的东西,国内财务对规则,费用内容,流程都比较懵,另外就是各项资料都…

java和python混合编程_浅谈C++与Java混合编程

在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请登陆疯狂java官网。现实的情况是,真实的项目中,通常是涉…

无法在源表中获得一组稳定的行_行输出变压器的结构、符号及电路分析

行输出变压器又称逆程变压器、回扫变压器,俗称行输出,它是电视机、显示器中的一个重要变压器。1.行输出变压器结构行输出变压器的全部绕组和高压整流管均密封在其中,底部引出各个绕组的引脚,高压输出采用高压引线直接送至显像管的…

c语言中bluetooth函数,C语言中的低功耗蓝牙-使用Bluez创建GATT服务器

小编典典我得到了运行BlueZ 5.31的示例GATT服务器(截至本文的最新信息):我的环境: 作为来宾OS(版本14.04 32位操作系统)的VagrantVirtual BoxUbuntu Trusty Tahr更新到linux内核3.19已安装的软件包:libglib2.0-dev libdbus-1-devlibudev-dev …

c++ map是有序还是无序的_c++ unorder_map的用法

1、unorder_map与map不同:map的KEY值是有序的,而unorder_map则是无序的;2、unorder_map自定义的KEY值时需要注意思下面两点: KEY为一个类时,需要重载符号; 需要自定义一个HASH类,至于为什么&…

pid调节软件_非常实用的PID算法和PID控制原理

点击箭头处“工业之家”,选择“关注公众号”!PID控制原理和特点工程实际中,应用最为广泛调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器问世至今已有近70年历史,它以其结构简单…

c语言的有趣小程序,一个有趣的小程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼源码:#include #include #include #include #include HINSTANCE g_hInstance 0;LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nSh…