当前位置: 首页 > news >正文

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经典游戏 唤醒你童年记忆

这些游戏你玩过几个&#xff1f; 1.贪吃蛇2.吃豆人3.加农炮4.四子棋5. Fly Bird<font color #f3704ab>6.记忆&#xff1a;数字对拼图游戏&#xff08;欢迎挑战&#xff01;用时&#xff1a;2min&#xff09;7.乒乓球8.上课划水必备-井字游戏&#xff08;我敢说100%的人都…...

什么是骨传导耳机?骨传导能保护听力吗?

骨传导耳机是一种非常特殊的蓝牙耳机&#xff0c;它通过骨传导技术将声音直接传送到内耳。这种技术不同于传统耳机&#xff0c;它不通过空气传送声音&#xff0c;而是通过头骨的振动来传送声音。 并且骨传导耳机能够在一定程度上起到保护听力的作用&#xff0c;主要是因为它们不…...

使用electron属性实现保存图片并获取图片的磁盘路径

在普通的网页开发中&#xff0c;JavaScript由于安全性的考虑&#xff0c;通常是无法直接获取到客户端的磁盘路径的。浏览器出于隐私和安全原因对此类信息进行了限制。 在浏览器环境下&#xff0c;JavaScript主要通过Web APIs来与浏览器进行交互&#xff0c;而这些API通常受到浏…...

进击的奶牛

题目 进击的奶牛 题意 通过二分查找算法找到一个最小间距x&#xff0c;使得在数组a中选出的k个数两两之间的间距都不小于x&#xff0c;并且x尽可能大。最后输出这个最大的x值。 思路 程序通过循环依次获取了n个整数&#xff0c;存储在数组a中。.然后&#xff0c;程序对数组a进…...

12月27日,每日信息差

以下是2023年12月27日的8条信息差 第一、小米公司&#xff1a;小米汽车正式加入小米“人车家全生态”&#xff0c;随着小米汽车的即将发布&#xff0c;小米“人车家全生态”也实现了真正闭环 第二、吉利将于2024年初发射11颗卫星&#xff0c;吉利银河E8率先搭载卫星通信技术。…...

【赠书第14期】AI短视频制作一本通:文本生成视频+图片生成视频+视频生成视频

文章目录 前言 1 前期准备 2 拍摄与录制 3 后期编辑 4 技巧与注意事项 5 推荐图书 6 粉丝福利 前言 随着智能技术的迅猛发展&#xff0c;AI 短视频制作成为了一种新兴而创新的表达方式&#xff0c;广泛应用于社交媒体、广告营销、教育培训等领域。本文将介绍 AI 短视频…...

简单工厂设计模式(计算器实例优化)

简单工厂设计模式&#xff08;计算器实例优化&#xff09; 介绍为什么采用面向对象编程而不是面向过程呢&#xff1f;实例讲解业务层划分出来逻辑层继承简单工厂&#xff1a;&#xff08;多态&#xff09;业务层&#xff1a;&#xff08;解耦合&#xff09;主控制台 总结 介绍 …...

iconify图标集离线使用方案简介

1.需求描述 前端项目&#xff0c;技术栈使用Vue3Element Plus&#xff0c;参考了ruoyi-vue-pro项目与vue-element-plus-admin项目&#xff0c;封装了一个Icon组件&#xff0c;图标使用的是iconify,项目部署在内网环境&#xff0c;不能连接互联网&#xff0c;需要部署一套iconi…...

java基础之理解多态

目录 简单理解 满足多态的三个条件 有类继承或者接口实现 子类要重写父类的方法 父类的引用指向子类的对象。 代码示例 动态多态 静态多态 个人观点 简单理解 简单理解就是&#xff0c;同一操作作用于不同的对象&#xff0c;可以有不同的解释&#xff0c;产生不同的执…...

第二证券:A股市场放量反弹 跨年行情或启动

沪指日线等级放量反弹&#xff0c;周四收中阳线成功站上20日均线&#xff0c;底部结构或可树立。创业板指大涨近4%&#xff0c;日线MACD出现底违反&#xff0c;多方动能较强&#xff0c;中等级反弹行情或在酝酿。月线来看&#xff0c;12月创业板指探底上升出现较长下影&#xf…...

web漏洞与修复

一、web漏洞 检测到目标X-Content-Type-Options响应头缺失 详细描述X-Content-Type-Options HTTP 消息头相当于一个提示标志&#xff0c;被服务器用来提示客户端一定要遵循在 Content-Type 首部中对 MIME 类型 的设定&#xff0c;而不能对其进行修改。这就禁用了客户端的 MIM…...

基于Java+SpringBoot+vue实现图书借阅管理系统

基于JavaSpringBootvue实现图书借阅和销售商城一体化系统 &#x1f345; 作者主页 程序设计 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 文章目录 基于JavaSpringBootvue实现图书借阅和销售商城一体化…...

xml文件学习(xml格式)可扩展标记语言(Extensible Markup Language)

XML 教程 文章目录 XML 文件学习1. XML 概述1.1 什么是 XML&#xff1f;1.2 XML 有什么作用&#xff1f; 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家政服务平台有管理员&#xff0c;雇主&#xff0c;雇员三个角色。管理员功能有个人中心&#xff0c;雇主管理&#xff0c;雇员管理&#xff0c;资料认证管理&#xff0c;项目类型管理&#xff0c;服务项目管理&#xff0c;需求信息管理&#xff0c;服务…...

数据库(Database)基础知识

什么是数据库 数据库是按照数据结构来组织、存储和管理数据的仓库&#xff0c;用户可以通过数据库管理系统对存储的数据进行增删改查操作。 数据库实际上是一个文件集合&#xff0c;本质就是一个文件系统&#xff0c;以文件的方式&#xff0c;将数据保存在电脑上。 什么是数据…...

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方式管理进程&#xff0c;管理的目标是进程是否具有读取权限的文件&#xff08;文件…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...