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

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年他发表《自然哲学的数 学原理》,阐述了万有引力和三大运动定律,奠定了此后三个世纪里力学和天文学的基础&…

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

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

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

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

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

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

对pca降维后的手写体数字图片数据分类_【AI白身境】深度学习中的数据可视化...

今天是新专栏《AI白身境》的第八篇,所谓白身,就是什么都不会,还没有进入角色。上一节我们已经讲述了如何用爬虫爬取数据,那爬取完数据之后就应该是进行处理了,一个很常用的手段是数据可视化。通过数据可视化&#xff0…

android实现箭头流程列表_反思|Android 列表分页组件Paging的设计与实现:系统概述...

作者:却把清梅嗅链接:https://github.com/qingmei2/blogs/issues/30前言本文将对Paging分页组件的设计和实现进行一个系统整体的概述,强烈建议 读者将本文作为学习Paging 阅读优先级最高的文章,所有其它的Paging中文博客阅读优先级…

sql server numeric 可存几位小数_想成为优秀SQL高手?你就差这些细节

标准结构化查询语言(Structured Query Language)简称SQL,sql是我们日常工作中使用最多一项技能,写sql可以说是一个可以干到退休的技能。看似简单,但要精通却很难。 sql包括增、删、改、查,创建表、删除表、修改表等等内容&#xf…

java random产生随机数_java的三种随机数生成方式,必掌握

随机数的产生在一些代码中很常用,也是我们必须要掌握的。而java中产生随机数的方法主要有三种:第一种:new Random()第二种:Math.random()第三种:currentTimeMillis()第一种需要借助java.util.Random类来产生一个随机数…

C 怎么处理windows路径_python学习笔记-7:文件读写之文件与文件路径

文件关键属性:路径文件名根据已知的文件路径生成包含正确路径分隔符的文件路径字符串:import osstt os.path.join(usr,bin,spam)print(stt)#usrbinspamwindows的路径分隔符为,字符串中使用需要转义字符,因此应输入为当前工作目录程序运行时&…

android手机图标 足球球星,世界足坛九大现役球星标志性绰号,第一名所有人都服!...

原标题:世界足坛九大现役球星标志性绰号,第一名所有人都服!9,“大腿”桑切斯自打智利天王桑切斯离开当年无比辉煌的巴萨加盟阿森纳后,就被无数球迷冠以“大腿”的绰号,当然这完全源自于他在英超阿森纳队中极…

mysql 互为主备 宕机 数据丢失_Devops部署-mysql主备多从搭建

​双主多从架构原理介绍IP端口账号密码服务名10.1.1.23306root/syncabc123!数据库A10.1.1.33306root/syncabc123!数据库B10.1.1.43306root/syncabc123!数据库C1.两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入…

sourcetree mac 免登录_「vscode remote ssh 免登录」mac

如果你只知道传统的ssh操作,或者sftp/ftp上传下载操作,那可能有点太low了。强烈推荐你使用 vscode remote ssh。举个栗子来形象比喻一下:钥匙开门 和 指纹开门 的区别。已经用 vscode remote ssh 功能有很久了,这种体验真的太棒了…

python中汉字与变量不可同时出现_Python语言应用培训课(选择练习)

第一部分1、多选题:Python在金融中的运用包括( )选项:A:绩效分析B:风险分析C:程序化交易D:量化分析答案: 【绩效分析;风险分析;程序化交易;量化分析】第二部分1、判断题:python语言支持中文字符作为变量名称,但具有语法意义的符号…

鸿蒙首饰用什么合成,天下HD鸿蒙炼炉是什么?鸿蒙炼炉讲解

在玩天下HD的时候各位又是否知道鸿蒙炼炉是什么呢?其实鸿蒙炼炉是游戏之中一个很重要的系统,而对于这个系统本次小编就给各位带来了鸿蒙炼炉讲解。或许各位都有用到天下HD的鸿蒙炼炉系统,但是各位又是否了解鸿蒙炼炉系统是怎么样的呢&#xf…

如何区分网线是几类的_小移课堂 | 网线这样选,网速才能嗖嗖的!

在家宅到长蘑菇的日子里最亲近的,除了家人,就是WiFi想必大家碰上网速不好的时候都会很抓狂为什么家里的网络明明签约的是千兆可网速一直上不去?网线,是卡住网速的关键因素!问网线不是通用的吗?还要用专门的网线吗&…

navicat premium 链接postgresql 无法加载表_PostgreSQL 每周新闻 2020311

PostgreSQL 每周新闻 2020-3-11英文原文地址:https://postgresweekly.com/issues/346Postgres子事务和性能本文展示了过度使用子事务对性能的影响,以及如何诊断在您的数据库里是否有这样的问题。Laurenz AlbePostgreSQL匿名器0.6:假名化和改进…

python无法打开_如何解决Windows命令行无法运行python文件?

我在使用windows的命令行运行python文件,但是每次出现的都是这种情况我设置了Path,D:Python,后来又设置了个PythonPath,添加了Lib和DLLS的路径,但是没用。 我觉得还是设置环境变量的问题,请问大家有什么办法…