2023.12.29 Python面向对象 封装_继承_多台
目录
1.封装-私有与公开权限
2.继承
2.1多继承
2.2继承多层传递
2.3重写父类方法
2.4继承链
2.5禁止私有继承
3.多态
4.总结
1.封装-私有与公开权限
-
公开属性、公开方法:随便调用
-
私有属性、私有方法:
-
只能在类定义的内部调用
-
以两个下划线开头
__
的都是私有权限
-
私有权限:
1- 前面加__来表示是私有
2- 外部无法直接访问私有权限的属性或者方法
3- 在类的内部,可以正常访问私有的属性或者方法
4- 强制访问私有属性或者方法的写法:实例对象名._类名__私有属性或者方法
class Women:""""""def __init__(self, name):self.name = name # 公开属性self.__age = 18 # 私有属性def func1(self):# 公开方法print(self.name)print(self.__age) # 可以调用print(self.__func2()) # 可以调用def __func2(self):# 私有方法print(self.name)print(self.__age)lady = Women('lady gaga')
lady.func1()
# lady.__func2() # 不可以调用
# print(lady.__age) # 不可以调用# 实例对象._类名__属性或方法名 可强行突破!
print(lady._Women__age) # 强行调用私有属性
lady._Women__func2() # 强行调用私有方法
2.继承
-
类的继承:在面向对象编程中,子类可以直接继承父类,从而使子类直接具备父类的能力(属性和方法)【代码复用】
-
继承作用:解决代码重用问题,提高开发效率
-
注意
-
站在父类的角度来看,父类派生出子类
-
站在子类的角度来看,子类继承于父类
-
父类也叫基类,子类也叫派生类
-
object 是 python 中所有类的父类
-
2.1多继承
class SmallDog(object):def eat(self):print('小口吃东西')def sleep(self):print('小憩一会')class BigDog(object):def drink(self):print('大口喝水')def sleep(self):print('呼呼大睡')# 多继承 默认调用先继承的那个父类中的同名方法
# SuperDog 类定义时同时继承了 SmallDog 和 BigDog
class SuperDog(BigDog, SmallDog):pass# 创建一个 SuperDog 对象
sd1 = SuperDog()
# SuperDog 从 SmallDog 继承了 eat 方法
sd1.eat()
# SuperDog 从 BigDog 继承了 drink 方法
sd1.drink()
# 默认调用先继承的那个父类中的同名方法
sd1.sleep()
2.2继承多层传递
# 爷爷类
class Animal(object):"""动物类"""def eat(self):print('吃东西')# 爸爸类
class Dog(Animal):"""狗类"""def drink(self):print('喝水')# 儿子类
class SuperDog(Dog):pass# 创建一个 SuperDog 对象
sd1 = SuperDog()
sd1.eat()
sd1.drink()
2.3重写父类方法
一个类里多个方法都用了同样的名字
重写父类(包括爷爷类及以上)方法:
-
从父类继承的方法不能满足子类的需要,为了拓展功能而重新定义了同名函数
-
重写形式:
-
在子类中定义了一个和父类(包括爷爷类及以上)同名的方法(参数也一样),即为对父类(包括爷爷类及以上)的方法重写
-
-
重写之后子类调用同名方法,默认只会调用子类的
-
类继承存在顺序链:
-
定义类名时从左到右的顺序,左边是右边的子类
-
class SuperDog(SmallDog, BigDog):
这个继承顺序为继承顺序:SuperDog->SmallDog->BigDog
-
-
子类调用父类被重写方法:在子类方法中还想调用父类的同名方法。可以使用如下方式:
-
父类名.同名方法(self, 形参1, ……)
-
super(顺序链目标类左边的类名, self).同名方法(...)
-
class SmallDog(object):def eat(self):print('吃小东西')
class BigDog(object):def eat(self):print('啃大骨头')class SuperDog(SmallDog, BigDog):# todo 继承顺序:SuperDog->SmallDog->BigDogdef eat(self):print('--方式1:父类名.同名方法(self, ...)--')# 需求1:调用 SmallDog 父类的 eat 方法SmallDog.eat(self)# 需求2:调用 BigDog 父类的 eat 方法BigDog.eat(self)print('--方式2:super(顺序链目标类左边的类名, self).同名方法(...)--')# 需求1:调用 SmallDog 父类的 eat 方法super(SuperDog, self).eat()# 需求2:调用 BigDog 父类的 eat 方法super(SmallDog, self).eat()# 本质:super(顺序链上目标父类左边的子类, self).目标父类的同名方法()print('--方式3:super().同名方法(...)--')# 需求1:调用 SmallDog 父类的 eat 方法super().eat() # 与super(SuperDog, self).eat()相同# 类的继承顺序链:在python中,一个类可以继承多个类,
# 而且父类还可能有父类,对于这种情况,类的继承是有一个先后顺序,
# 这个顺序就叫继承顺序链。
# 如何查看一个类的继承顺序链:类名.__mro__
print(SuperDog.__mro__)# 创建一个 SuperDog 对象
sd1 = SuperDog()
sd1.eat()
2.4继承链
class A:def func(self):print("A_的打印输出")class C(A):def func(self):super().func()print("C_的打印输出")class B(A):def func(self):super().func()print("B_的打印输出")class D(B,C):def func(self):super().func()print("D_的打印输出")# 从D角度出发,继承顺序如下:D->B->C->A
# 多继承中,有继承先后顺序,先继承的是第一个父类
d = D()
d.func()
print(D.__mro__)# 输出如下
在D看来,B的爹是C
A类中的func函数
C类中的func函数
B类中的func函数
D类中的func函数
在B看来,B的爹是A
A类中的func函数
B类中的func函数
2.5禁止私有继承
总结:
1- 私有的属性和方法不能被子类继承 (子类可以暴力访问)
2- 面向对象中,封装(私有权限)的主要作用,是用来对外屏蔽一些底层实现细节,对外提供更加安全/好用的方法
举例:PC电脑,只是对消费者暴露键盘、屏幕、USB接口等简单的操作
class Animal:def __init__(self):self.name = '动物'# 私有属性self.__age = 2# 私有方法def __pee(self):print("动物拉粑粑")"""面向对象中,封装(私有权限)的主要作用,是用来对外屏蔽一些底层实现细节,对外提供更加安全/好用的方法举例:PC电脑,只是对消费者暴露键盘、屏幕、USB接口等简单的操作"""def show_info(self):self.__pee()print(self.__age)class Dog(Animal):passd = Dog()
d.show_info()
# d.__pee()
# print(d.__age)# 暴力方式访问(不推荐)
d._Animal__pee()
print(d._Animal__age)
3.多态
同一个代码,由于传入实例对象的不同,最终有不同的调用效果!
# Python是动态语言,站在代码写手的角度,
# 本身就是多态,不存在非多态的情况
def add(a, b):return a + b
res = add(1, 2)
print(res) # 3
res = add('hello', 'world')
print(res) # helloworld
4.总结
面向对象总结:
面向对象的3大特征:封装、继承、多态
定义类的总结:
0- 有多种选择的时候,进入公司后,可能每个小组的编程风格不一样,根据小组风格调整,一般会有代码规范
1- 类的命名:大驼峰命名法。所有单词首字母都大写
2- 所有类的顶级父类,默认是object,可写可不写,一般不写。
魔法方法总结:
1- 常用__init__、__str__、__del__
2- 命名这块,前后都需要有下划线
3- __init__:对类的实例对象进行初始化操作,或者对一些公共资源进行初始化,例如:文件打开、数据库的连接
4- __str__:一般用来对类的实例对象进行格式化输出,返回值类型必须是string。打印对象,默认打印的是内存地址值
5- __del__:在实例对象被删除(通过del)或者被自动销毁(程序运行结束)的时候会调用。一般是用来释放资源
关键字总结:
1- self关键字:它代表是对应的实例对象。不需要手动传值,由python解释器进行赋值
2- cls关键字:在类方法中出现的。它代表的是类
封装总结:
1- 我们进行类的定义、方法的定义,这些操作,都称之为封装
2- 封装里面的私有权限,用来对外部屏蔽类内部的底层细节,不对外暴露
3- 分为私有属性和私有方法。命名的时候在前面使用__,用来表示私有
4- 私有属性和方法,正常只能在类的内部访问
5- 私有属性和方法,可以通过保留方式在类的外部访问。也就是 实例对象名称._类名__私有属性和方法。该方式不推荐
继承总结:
1- 继承:子类从父类中获得相关的方法和属性,该过程称之为继承。不能继承私有属性和方法
2- 继承分类:单继承、多继承、多层继承
3- 继承之后,子类可以重写父类的方法。一般什么情况下会重写?子类需要加强或者改造方法的时候
4- 在子类方法里,调用父类的方法,可以通过如下三种方式:
4.1 (推荐)父类类名.方法名(self,实参1,实参2...)
4.2 super(子类类名,self).方法名(实参1,实参2...)
4.3 super().方法名(实参1,实参2...)
5- 多继承的顺序关系
class A:
class B(A):
class C(A):
class D(B, C):
上面代码的继承关系,【从D的角度出发】,D>B>C>A
多态总结:
1- 多态的含义:多态就是让不同的对象对同一方法有不同的表现
类中的方法总结:
1- 分类:实例方法、类方法、静态方法
2- 实例方法:所有实例对象都能够调用的方法
3- 类方法:
3.1- @classmethod的装饰器。
3.2- 调用的时候,推荐使用类名进行调用。不推荐使用实例对象名进行调用
3.3- 类方法里面只能操作类属性
3.4- 类方法的作用:一般也是用来对公共资源进行初始化操作
4- 静态方法:
4.1- @staticmethod的装饰器
4.2- 调用的时候,推荐使用类名进行调用。不推荐使用实例对象名进行调用
4.3- 静态方法里面不能操作任何类型的属性
4.4- 静态方法的作用:一般也是用来对公共资源进行初始化操作
属性总结:
1- 分类:实例属性、类属性
2- 实例属性:所有实例对象都具备的属性
3- 类属性:类具备的属性。调用的时候,推荐使用类名进行调用。不推荐使用实例对象名进行调用
相关文章:
2023.12.29 Python面向对象 封装_继承_多台
目录 1.封装-私有与公开权限 2.继承 2.1多继承 2.2继承多层传递 2.3重写父类方法 2.4继承链 2.5禁止私有继承 3.多态 4.总结 1.封装-私有与公开权限 公开属性、公开方法:随便调用 私有属性、私有方法: 只能在类定义的内部调用 以两个下划线开头__的…...
通过自然语言处理增强推荐系统:协同方法
一、介绍 自然语言处理 (NLP) 是人工智能的一个分支,专注于使机器能够以有意义且有用的方式理解、解释和响应人类语言。它包含一系列技术,包括情感分析、语言翻译和聊天机器人。 另一方面,推荐系统(RecSys)是旨在向用户…...
大创项目推荐 深度学习OCR中文识别 - opencv python
文章目录 0 前言1 课题背景2 实现效果3 文本区域检测网络-CTPN4 文本识别网络-CRNN5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习OCR中文识别系统 ** 该项目较为新颖,适合作为竞赛课题方向,…...
Python经典游戏 唤醒你童年记忆
这些游戏你玩过几个? 1.贪吃蛇2.吃豆人3.加农炮4.四子棋5. Fly Bird<font color #f3704ab>6.记忆:数字对拼图游戏(欢迎挑战!用时:2min)7.乒乓球8.上课划水必备-井字游戏(我敢说100%的人都…...
什么是骨传导耳机?骨传导能保护听力吗?
骨传导耳机是一种非常特殊的蓝牙耳机,它通过骨传导技术将声音直接传送到内耳。这种技术不同于传统耳机,它不通过空气传送声音,而是通过头骨的振动来传送声音。 并且骨传导耳机能够在一定程度上起到保护听力的作用,主要是因为它们不…...
使用electron属性实现保存图片并获取图片的磁盘路径
在普通的网页开发中,JavaScript由于安全性的考虑,通常是无法直接获取到客户端的磁盘路径的。浏览器出于隐私和安全原因对此类信息进行了限制。 在浏览器环境下,JavaScript主要通过Web APIs来与浏览器进行交互,而这些API通常受到浏…...
进击的奶牛
题目 进击的奶牛 题意 通过二分查找算法找到一个最小间距x,使得在数组a中选出的k个数两两之间的间距都不小于x,并且x尽可能大。最后输出这个最大的x值。 思路 程序通过循环依次获取了n个整数,存储在数组a中。.然后,程序对数组a进…...
12月27日,每日信息差
以下是2023年12月27日的8条信息差 第一、小米公司:小米汽车正式加入小米“人车家全生态”,随着小米汽车的即将发布,小米“人车家全生态”也实现了真正闭环 第二、吉利将于2024年初发射11颗卫星,吉利银河E8率先搭载卫星通信技术。…...
【赠书第14期】AI短视频制作一本通:文本生成视频+图片生成视频+视频生成视频
文章目录 前言 1 前期准备 2 拍摄与录制 3 后期编辑 4 技巧与注意事项 5 推荐图书 6 粉丝福利 前言 随着智能技术的迅猛发展,AI 短视频制作成为了一种新兴而创新的表达方式,广泛应用于社交媒体、广告营销、教育培训等领域。本文将介绍 AI 短视频…...
简单工厂设计模式(计算器实例优化)
简单工厂设计模式(计算器实例优化) 介绍为什么采用面向对象编程而不是面向过程呢?实例讲解业务层划分出来逻辑层继承简单工厂:(多态)业务层:(解耦合)主控制台 总结 介绍 …...
iconify图标集离线使用方案简介
1.需求描述 前端项目,技术栈使用Vue3Element Plus,参考了ruoyi-vue-pro项目与vue-element-plus-admin项目,封装了一个Icon组件,图标使用的是iconify,项目部署在内网环境,不能连接互联网,需要部署一套iconi…...
java基础之理解多态
目录 简单理解 满足多态的三个条件 有类继承或者接口实现 子类要重写父类的方法 父类的引用指向子类的对象。 代码示例 动态多态 静态多态 个人观点 简单理解 简单理解就是,同一操作作用于不同的对象,可以有不同的解释,产生不同的执…...
第二证券:A股市场放量反弹 跨年行情或启动
沪指日线等级放量反弹,周四收中阳线成功站上20日均线,底部结构或可树立。创业板指大涨近4%,日线MACD出现底违反,多方动能较强,中等级反弹行情或在酝酿。月线来看,12月创业板指探底上升出现较长下影…...
web漏洞与修复
一、web漏洞 检测到目标X-Content-Type-Options响应头缺失 详细描述X-Content-Type-Options HTTP 消息头相当于一个提示标志,被服务器用来提示客户端一定要遵循在 Content-Type 首部中对 MIME 类型 的设定,而不能对其进行修改。这就禁用了客户端的 MIM…...
基于Java+SpringBoot+vue实现图书借阅管理系统
基于JavaSpringBootvue实现图书借阅和销售商城一体化系统 🍅 作者主页 程序设计 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 文章目录 基于JavaSpringBootvue实现图书借阅和销售商城一体化…...
xml文件学习(xml格式)可扩展标记语言(Extensible Markup Language)
XML 教程 文章目录 XML 文件学习1. XML 概述1.1 什么是 XML?1.2 XML 有什么作用? 2. XML 基本结构1. 声明2. 元素3. 属性4. 文本5. 注释 3. XML 高级知识3.1 XML 命名空间3.2 XML 架构3.3 XML 工具3.4 XML 技术 4. XML 应用实例 XML 文件学习 XML&#…...
nodejs+vue+ElementUi家政服务系统c90g5
项目中登录模块用到token家政服务平台有管理员,雇主,雇员三个角色。管理员功能有个人中心,雇主管理,雇员管理,资料认证管理,项目类型管理,服务项目管理,需求信息管理,服务…...
数据库(Database)基础知识
什么是数据库 数据库是按照数据结构来组织、存储和管理数据的仓库,用户可以通过数据库管理系统对存储的数据进行增删改查操作。 数据库实际上是一个文件集合,本质就是一个文件系统,以文件的方式,将数据保存在电脑上。 什么是数据…...
QT应用篇 二、QML用Image组件实现Progress Bar 的效果
QT应用篇 一、QT上位机串口编程 二、QML用Image组件实现Progress Bar 的效果 三、QML自定义显示SpinBox的加减按键图片及显示值效果 文章目录 QT应用篇前言一、qml需求二、使用组件1.Image组件2.Image中fillMode的使用例子 总结 前言 记录自己学习QML的一些小技巧方便日后查找…...
SElinux工作原理简介并演示chcon、semanage、restorecon的使用方法
目录 一.SElinux工作原理简介 1.system_u 2.object_r 3.httpd_sys_content_t 4.s0 二.SElinux策略的具体使用详情 1.restorecon 2.semanage 3.chcon 一.SElinux工作原理简介 通过mac方式管理进程,管理的目标是进程是否具有读取权限的文件(文件…...
表情串转换
前言 NWAFU 2021阶段二 D 一、题目描述 题目描述 在一个字符串中,设置了由‘/’前导字符和某些特定字母构成的转义子字符串,如“/s”、“/f”、“/c”等用于表示特殊表情符号。现要求编写一个函数,将给定字符串中的转义字符串转换为表情字…...
【娱乐小技巧】网页旋转90° 3步搞定
一、按F12,打开控制台; 二、点击号; 插入新body; 三、粘贴代码 -webkit-transform: rotate(90deg);小结,角度值可以自选; 代码的效果:...
移动管理系统软件哪家好?它是如何帮助企业降本增效的?
现在很多管理系统都可以用移动设备接入,最常见的就是手机。只要给管理系统创建一个微信小程序接口,那么要使用系统功能的时候直接打开微信小程序就可以了。例如我们小区的物业巡检就是通过微信扫码打开巡检工单记录信息的,直接用巡检保安自己…...
电脑表格文件丢失如何找回?3个方法拯救丢失的文件!
“太难了!我辛辛苦苦在电脑上做的表格,不知道什么原因突然就没有了,有什么方法可以找回丢失的表格文件吗?快帮帮我吧!” 在日常工作中,很多电脑用户可能都会用到表格文件,这往往记载了大量的重要…...
VSCode 如何安装插件的历史版本
背景 在日常开发过程中,我们可能会遇到新版VSCode插件存在问题,无法正常工作的情况。这种情况下,一种可行的解决方案就是安装插件的历史版本。VSCode 插件默认安装的都是插件最新的版本,例如下面 vscode-styled-compoents 插件 本…...
关于edge浏览器以及插件推荐
目录 广告拦截和隐私工具 密码管理器 生产力和组织工具 写作和语法工具 购物助手 娱乐和个性化 安全性和VPN 开发者工具 其他实用工具 Microsoft Edge 是一款基于Chromium开源项目的现代网络浏览器,由微软开发。它是Internet Explorer的继任者,…...
Vue Tinymce富文本组件自定义操作按钮
想实现如下效果 首先在init方法中的增加一插件 增加一个setup方法 代码 setup: function(editor) { editor.ui.registry.addButton(testButton, {text: 日记日期,tooltip: 插入日记日期,onAction: () > editor.insertContent("123456")});}, 操作效果࿰…...
论文阅读:Blind Super-Resolution Kernel Estimation using an Internal-GAN
这是发表在 2019 年 NIPS 上的一篇文章,那个时候还叫 NIPS,现在已经改名为 NeurIPS 了。文章中的其中一个作者 Michal Irani 是以色 Weizmann Institute of Science (魏茨曼科学研究学院) 的一名教授,对图像纹理的内在统计规律有着很深入的研…...
韩国Neowine车规认证加密芯片ALPU-CV
由工采网代理的ALPU-CV是韩国Neowine(纽文微)推出的一款高性能车规级加密芯片;也是ALPU系列中的高端IC,该芯片通过《AEC-Q100》认证,目前已经在国产前装车辆配件量产使用,主要用于版权license保护、设备防伪…...
【每日一题】收集巧克力
文章目录 Tag题目来源题目解读解题思路方法一:枚举操作数 写在最后 Tag 【枚举】【数组】【2023-12-28】 题目来源 2735. 收集巧克力 题目解读 有长度为 n, 下标从 0 开始的整数数组 nums, 表示收集不同类型的巧克力的成本. nums[i] 表示收集类型 i 巧克力的成本…...
新疆建设监理公司网站/成都疫情最新消息
上图是LPC1114系统滴答定时器(SysTick)的结构图。系统滴答定时器位于Cortex-M0内核中,也就是说,不论是LPC1114,还是其他的Cortex-M0内核单片机,都有这个系统定时器。其存在的主要目的是为嵌入式操作系统提供100Hz(即10ms)的定时节…...
网站快照优化公司/seo快速排名软件案例
一、背景及现状1. 第一阶段在 2019 年之前,汽车之家的大部分实时业务都是运行在 Storm 之上的。Storm 作为早期主流的实时计算引擎,凭借简单的 Spout 和 Bolt 编程模型以及集群本身的稳定性,俘获了大批用户,我们在 2016 年搭建了 …...
哪些网站是用c语言做的/网络广告策划的内容
# 1:给定一个数,判断他是正数,负数,还是0 a int(input("请输入一该个整数")) if a 0:print(a, "是0") elif a > 0:print(a, "是正数") else:print(a, "是负数")# 练习2:…...
king wordpress theme/外链网站是什么
“近日,水韵城商业管理有限公司与竞优软件达成战略合作协议,在水韵城天虹商业地产管理信息化方面开展合作关系,深化合作内容。水韵城天虹将使用竞优的商业运营管理系统,搭建一体化管控和运营信息化平台,实现从传统管理…...
网站建设报告实训步骤/百度客服电话号码
统一项目管理平台(UMPlatForm.NET) 4.10 用户权限管理模块 统一项目管理平台(UMPlatForm.NET),基于.NET的快速开发、整合框架。 4.10用户权限管理模块 在实际应用中我们会发现,权限控制会经常变动,如&#…...
政府网站建设 2017年/海外域名
1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,你就知道自己和别人思路的差异。2.初学者请不要看太多太多的书那会误人子弟的,先找本系统的学,很多人用了很久都是只…...