Python 07面向对象的三大特点【封装、继承、多态】

news2024/11/19 2:20:48

😀前言
在软件开发的过程中,面向对象编程(Object-Oriented Programming,简称 OOP)已经成为了一种不可或缺的编程范式。它允许开发人员创建属于自己的对象,具有其特征和行为,通过将数据和方法绑定到一起来模拟现实世界中的对象。OOP 主要依赖于三大核心特性:封装、继承和多态,来构建可复用、可维护和组织良好的代码。
.
在本篇文章中,我们将深入探讨 Python 中的面向对象编程的三大特性。我们将从封装的基本概念开始,然后讨论继承和多态如何允许我们创建灵活和高效的程序。我们还将介绍类方法、类属性及静态方法的使用,来提供一个全面的视角,理解面向对象编程在 Python 中的实现

🏠个人主页:尘觉主页
在这里插入图片描述

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

在csdn获奖荣誉: 🏆csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🤗 端午大礼包获得者
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🥰阿里云专家博主
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 😉亚马逊DyamoDB结营

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

文章目录

  • Python 07面向对象的三大特性【封装、继承、多态】
  • 1、封装
  • 2、继承
  • 3、多态
  • 4、类属性和类方法
  • 6、静态方法
    • 😄总结

Python 07面向对象的三大特性【封装、继承、多态】

首先我们要了解面向对象程序设计三大特性:

  1. 封装------根据职责将属性和⽅法封装到⼀个抽象的类中 ; 增强代码的安全性
  2. 继承------实现代码的重⽤,相同的代码不需要重复的编写 ; 增强代码的可重用性
  3. 多态------不同的对象调⽤相同的⽅法,产⽣不同的执⾏结果,增加代码的灵活度 。 增强代码的可扩展性

1、封装

1.1 类的私有属性和私有⽅法:

  1. 私有属性就是对象不希望公开的属性 ;
  2. 私有⽅法就是对象不希望公开的⽅法 。

1.2 定义方式

在定义属性或⽅法时,在属性名或者⽅法名前增加两个下划线,定义的就是私有属性或方法。

# 定义Cat类
class Cat:
    def __init__(self,name = "jack"):
        # __name 为私有属性
        self._name = name

    # __eat 为私有方法
    def __eat(self):
        print(self._name + "吃饭")

    def drink(self):
        self.__eat()
        print(self._name + "喝水")


# 创建Cat 类
cat = Cat();


# 调用Cat 喝水的方法
cat.drink()

image-20230903171035456

对于私有属性和私有方法,只能在类的内部访问,类的外部无法访问。

2、继承

继承的概念:⼦类拥有⽗类的所有⽅法和属性。

语法:

class 类名(⽗类名):

​ pass

# 定义Cat类
class Cat:
    def __init__(self, name="tom"):
        # __name 为私有属性
        self.__name = name

    # __eat 为私有方法
    def __eat(self):
        print(self.__name + "吃饭")

    def drink(self):
        self.__eat()
        print(self.__name + "喝水")


# 创建cat的子类
class kitten(Cat):
    def run(self):
        pass


kitten = kitten()

kitten.drink()

image-20230903171743923

⼦类继承⾃⽗类,可以直接享受⽗类中已经封装好的⽅法,不需要再次开发 。

⼦类中应该根据职责,封装⼦类特有的属性和⽅法。

继承的传递性:

其实就是,B继承A,拥有了A的属性和方法,然后C又继承B,就拥有了B和A的所有属性和方法。

方法的重写:

当⽗类的⽅法实现不能满⾜⼦类需求时,可以对⽅法进⾏重写(override)。 重写⽗类⽅法有两种情况:

1、覆盖父类的方法

如果在开发中,⽗类的⽅法实现和⼦类的⽅法实现,完全不同 ,就可以使 ⽤覆盖的⽅式,在⼦类中重新编写⽗类的⽅法实现 。

重写之后,在运⾏时,只会调⽤⼦类中重写的⽅法,⽽不再会调⽤父类封装的方法。

# 定义Cat类
class Cat:
    def __init__(self, name="jack"):
        # __name 为私有属性
        self.__name = name

    # __eat 为私有方法
    def __eat(self):
        print(self.__name + "吃饭")

    def drink(self):
        self.__eat()
        print(self.__name + "喝水")


# 创建cat的子类
class kitten(Cat):
    def run(self):
        pass

    # 覆盖了父类的同名方法
    def drink(self):
        print("喝水")


kitten = kitten()

kitten.drink()

image-20230903172137022

2、对⽗类⽅法进⾏扩展

如果在开发中,既要使用父类的方法,又想增加功能, 就可以使⽤扩展的⽅式 。

  1. 在⼦类中重写⽗类的⽅法 ;
  2. 在需要的位置使⽤ super().⽗类⽅法来调⽤⽗类⽅法的执⾏ ;
  3. 代码其他的位置针对⼦类的需求,编写⼦类特有的代码实现 。
# 定义Cat类
class Cat:
    def __init__(self, name="小白"):
        # __name 为私有属性
        self.__name = name

    # __eat 为私有方法
    def __eat(self):
        print(self.__name + "吃饭")

    def drink(self):
        self.__eat()
        print(self.__name + "喝水")


# 创建cat的子类
class kitten(Cat):
    def run(self):
        pass

    # 对父类的 sleep 方法进行了扩展
    def drink(self, name):
        super().drink()
        print(name + "喝水")


kitten = kitten()

kitten.drink("jack")

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

⽗类的私有属性和私有⽅法

  1. ⼦类对象不能在⾃⼰的⽅法内部,直接访问⽗类的私有属性或私有⽅法;
  2. ⼦类对象 可以通过⽗类的公有⽅法间接访问到私有属性或私有⽅法;
  3. 私有属性、⽅法是对象的隐私,不对外公开,外界以及⼦类都不能直接访问。
  4. 私有属性、⽅法通常⽤于做⼀些内部的事情 。

object 类

  • 在 Python 3 中定义类时,如果没有指定⽗类,会默认使⽤ object 作为该类的基类 —— Python 3 中定义的类都是新式类 。
  • 在 Python 2 中定义类时,如果没有指定⽗类,则不会以 object 作为基类 。新式类和经典类在多继承时 —— 会影响到⽅法的搜索顺序 。
  • 为了保证编写的代码能够同时在 Python 2 和 Python 3 运⾏!今后在定义类时,如果没有父类,建议统一继承自 object。

3、多态

不同的⼦类对象调⽤相同的⽗类⽅法,产⽣不同的执⾏结果

# 定义Cat类
class Cat:
    def __init__(self, name="小白"):
        # __name 为私有属性
        self.__name = name

    # __eat 为私有方法
    def __eat(self):
        print(self.__name + "吃饭")

    def drink(self):
        self.__eat()
        print(self.__name + "喝水")


# 创建cat的子类
class kitten(Cat):
    def run(self):
        pass

    # 对父类的 sleep 方法进行了扩展
    def drink(self, name):
        super().drink()
        print(name + "喝水")


class dog(Cat):
    def drink(self):
        print("我是一只可爱的小狗狗")


kitten = kitten()
# 调用父类的 drink 方法
kitten.drink("小小白")

dog = dog()
# 调用父类的 drink 方法
dog.drink()

image-20230903172617286

4、类属性和类方法

不需要创建类的对象,通过 类名. 的⽅式就可以访问类的属性或者调用类的方法 。

1、类属性

# 定义Cat类
class Cat:
    # name 为类属性,通过 Cat.name 访问
    name = "小黄"

    def __init__(self, name="小白"):
        # __name 为私有属性
        self.__name = name
        print(self.__name)


cat=Cat()
print(Cat.name)

image-20230903172901274

2、类方法

  1. 用@classmethod 修饰的方法为类方法;
  2. 类方法的参数为 cls,在类方法内部通过 cls.类属性 或者 cls.类方法 来访问同一个类中的其他类属性和类方法;
  3. 类方法不需要实例化就可以调用,类方法只能访问同一个类中的类属性和类方法
# 定义Cat类
class Cat:
    # name 为类属性,通过 Cat.name 访问
    name = "小黄"

    def __init__(self, name="小白"):
        # _name 为私有属性
        self._name = name

    # drink 为类方法
    @classmethod
    def drink(cls):
        print(cls.name + "喝水")


print(Cat.name)
Cat.drink()

image-20230903173746114

注:在普通方法中通过 类名.类属性 或者 类名.类方法 来访问类属性和类方法

6、静态方法

如果需要在类中封装⼀个⽅法,这个⽅法既不需要访问实例属性 或者调⽤实例⽅法也不需要访问类属性或者调⽤类⽅法, 这个时候,可以把这个⽅法封装成⼀个静态⽅法。

  • 用@staticmethod 修饰的方法为静态方法;
  • 静态方法是独立存在的,不能访问类或者实例的任何属性和方法;
  • 通过 类名.静态方法 调⽤静态⽅法 。

语法:

@staticmethod

def 静态⽅法名():

​ pass

# 定义Cat类
class Cat:
    # drink 为类的静态方法
    @staticmethod
    def drink():
        print("记得喝水哦")


Cat.drink()

image-20230903173832237

😄总结

通过本文的学习,我们不仅掌握了 Python 中面向对象的三大特性——封装、继承和多态的基本理论和实现方式,还深入了解了类属性、类方法和静态方法的使用和意义。

封装帮助我们保护了对象的内部状态,同时提高了代码的可读性和安全性;继承则允许我们创建子类来重用和扩展父类的功能,极大地增强了代码的可重用性;而多态则提供了一个接口来访问一个类中的多个形式,使我们的代码更具灵活性和可扩展性。

此外,我们还学会了如何通过类属性和类方法来操作与类本身相关联的数据,以及如何使用静态方法来创建与类无关的方法。

通过掌握这些基本概念和技巧,我们已经具备了使用 Python 进行面向对象编程的基本知识,为我们未来的编程之路打下了坚实的基础。希望通过不断的练习和实践,我们能更好地运用这些理论知识到实际的项目开发中,编写出更高效、更灵活的代码。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

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

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

相关文章

Python中进行特征重要性分析的9个常用方法

特征重要性分析用于了解每个特征(变量或输入)对于做出预测的有用性或价值。目标是确定对模型输出影响最大的最重要的特征,它是机器学习中经常使用的一种方法。 为什么特征重要性分析很重要? 如果有一个包含数十个甚至数百个特征的数据集,每个特征都可能…

排序与分页——“MySQL数据库”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是MySQL数据库里面的排序与分页,下面,让我们进入排序与分页的世界吧!!! 排序数据 分页 排序数据 排序规则 使用 ORDER BY 子句排序 ASC&#xf…

在JavaScript中,什么是浏览器事件循环(browser event loop)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浏览器事件循环(Browser Event Loop)⭐ 执行同步任务⭐ 处理微任务队列(Microtask Queue)⭐ 处理宏任务队列(Macrotask Queue)⭐ 重复循环⭐ 写在最后 ⭐ 专栏简介 前…

一、K近邻算法K-NN

一、算法思路 K近邻算法,k-nearest neighbor,即K-NN 通俗来说:给定一个元素,然后以该元素坐标为圆心开始画圆,其中K值是超参数需要人为给定,圆的半径逐渐增大(距离度量采用欧氏距离),直到包含其…

【电子元件】常用电子元器件的识别之电容器

目录 前言1. 电容器的简介2.电容器的识别1. 铝电解电容器2.钽电解电容器3.固态电解电容器4.瓷介电容器5. 贴片陶瓷电容器6. 聚丙烯电容7. 金属化聚丙烯薄膜电容器8. 独石电容器9. 涤纶电容器10. 超小型金属化聚酯薄膜电容器11. 可变电容器11.1 空气可变电容器11.2 薄膜介质可变…

Vue前端页面打印

前端依赖10-插件"print-js": “^1.6.0” 一:简介 print-js 是一个 Vue.js 插件,用于在 Vue.js 项目中实现打印功能。它依赖于 print-js 库,所以需要安装这个库。 能实现以下功能: PDF打印(默认&#xff…

Python语言:求水仙花数案例讲解

求水仙花数是循环和判断语句相结合的一个经典案例。 思路分析 通过循环遍历100到999之间的数字然后根据他们的个位,十位,百位上的数字立方和是否为他本身来判断分析得出什么数是水仙花数。 1)如何循环遍历100到999的所有数字? 使…

10分钟开发Kubernetes Operator

Operator是扩展原生Kubernetes能力的主要模式,本文通过一个简单示例,介绍了如何从0开始构建Kubernetes Operator实现用户自定义功能。原文: Build a Kubernetes Operator in 10 Minutes 你也许能够将应用熟练的部署到Kubernetes[1]上,但你知道…

MAUI android连接sqlserver

PDA是android系统,调用金蝶云星空webapi实现仓库收发料,使用读取webapi有些功能无法实现,需要直接读写数据库,读取报错,如图: 用控制台程序测试正常读取 google搜索了一圈, 都需要使用ssl证书才…

华为云云耀云服务器 L 实例评测|配置教程 + 用 Python 简单绘图

文章目录 Part.I IntroductionChap.I 云耀云服务器 L 实例简介Chap.II 参与活动步骤 Part.II 配置Chap.I 初步配置Chap.II 配置安全组 Part.III 简单使用Chap.I VScode 远程连接华为云Chap.II 简单绘图 Reference Part.I Introduction 本篇博文是为了参与华为“【有奖征文】华…

为建模而建模,高成本的临床预测模型意义何在?

9.23-24 郑老师“量表与中介研究数据分析”课程,欢迎报名 “量表与中介研究数据分析”9.23-24直播课,发文后退款 关于预测模型,周三有位同学过来咨询我,说“郑老师,毕业论文,建一个脑卒中患者抑郁的预测模型…

Linux 简介 启动过程

简介 Linux 是一套免费使用和自由传播的开放源码的类 UNIX 操作系统,英文解释为: Linux is not Unix。1991 年由林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的,主要受到 Minix 和 Unix 思想的…

JavaSE---常用的API

1. 什么是API? API (Application Programming interface) 应用程序编程接口。通俗来讲,就是Java已经帮我们写好了一些方法,我们直接拿过来用即可。 iodraw:https://www.iodraw.com/ API在线中文文档:https://www.ma…

Python入门教程39:教你使用distutils本地发布模块与模块安装的操作

★★★★★博文创作不易,我的博文不需要打赏,也不需要知识付费,可以白嫖学习编程小技巧。使用代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞收藏分享置顶,小红牛在此表示感谢…

RabbitMQ消息可靠性(一)-- 生产者消息确认

前言 在项目中,引入了RabbitMQ这一中间件,必然也需要在业务中增加对数据安全性的一层考虑,来保证RabbitMQ消息的可靠性,否则一个个消息丢失可能导致整个业务的数据出现不一致等问题,对系统带来巨大的影响,…

tomcat架构概览

https://blog.csdn.net/ldw201510803006/article/details/119880100 前言 Tomcat 要实现 2 个核心功能: 处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化。加载和管理 Servlet,以及具体处理 Request 请求。 因此 Tomc…

weblogic __ 10.3.6 __ 反序列化漏洞 _ CVE-2017-10271

weblogic __ 10.3.6 __ 反序列化漏洞 _ CVE-2017-10271 说明内容漏洞编号CVE-2017-10271漏洞名称反序列化漏洞影响范围10.3.6.0.0,12.1.3.0.0,12.2.1.1.0,12.2.1.2.0漏洞描述Weblogic的WLS Security组件对外提供webservice服务,其…

MySQL里的查看操作

查看数据库或者表 列出所有数据库: show databases;查看正在使用的数据库(必须大写): SELECT DATABASE();列出数据库中的表: use 数据库;//选中数据库 show 表;//列出当前数据库下所有表获取数据库表结构&#xff…

OpenCV(四十七):RANSAC优化特征点匹配

1.RANSAC算法介绍 RANSAC是一种常用的参数估计方法,全称为Random Sample Consensus(随机抽样一致性)。它的主要思想是通过随机选择一部分数据样本,构建模型并评估其拟合程度,迭代过程中逐步优化模型,最终得…

Linux知识点 -- 网络基础(二)

Linux知识点 – 网络基础(二)(1) 文章目录 Linux知识点 -- 网络基础(二)(1)一、使用协议来实现一个网络版的计算器1.自定义协议2.守护进程3.使用json来完成序列化 二、HTTP协议1.概念…