python--面向对象以及其三大特性(封装、继承、多态)

news2024/9/22 15:45:16

文章目录

  • 前言
  • 一、面向过程
  • 二、 面向对象
  • 三、面向对象的三大特性
    • 一、封装
    • 二、继承
      • 私有属性和私有方法
    • 三、多态
  • 四、高级特性
  • 单例模式


前言

这一节主要学习面向对象以及面向对象的三大特性:封装、继承、多态;还有高级特性:类方法、静态方法、@property类属性、单例模式(基于装饰器、基于new方法)

一、面向过程

面向过程是一种以过程为中心的编程思想:分析出解决问题所需要的步骤、然后用函数把这些步骤一一实现,使用的时候一个一个调用就可以了

面向过程的特点:
优点:性能比面向对象高、因为类在调用的时候需要实例化,开销比较大,比较消耗资源
缺点:没有面向对象易于维护、易复用、易扩展
特性:模块化、流程化

二、 面向对象

面向对象是吧构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,二十为了描述整个事务在整个解决问题的步骤中的行为

三、面向对象的三大特性

__init__方法就是将对象和属性绑定在一起
类:是创建实例的模板
对象:是一个一个具体的实例
实例化;就是用类创建对象的过程
在这里插入图片描述

一、封装

__init__方法就是将对象和属性绑定在一起
构造方法:实例化对象时自动执行的方法
self:self实质上是实例化的对象
类方法中,python解释器会自动把对象作为参数传给self

下面就是一个简单的封装

class People:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def shopping(self):
        print(f'{self.name},{self.age}岁,{self.gender},去西安赛格购物广场购物')

    def playGame(self):
        print(f'{self.name},{self.age}岁,{self.gender},在家里玩游戏')

    def learning(self):
        print(f'{self.name},{self.age}岁,{self.gender},在西部开源学习')


p1 = People('小明', '18', '男')
p2 = People('小王', '22', '男')
p3 = People('小红', '20', '女')
p1.shopping()
p2.playGame()
p3.learning()


小明,18,,去西安赛格购物广场购物
小王,22,,在家里玩游戏
小红,20,,在西部开源学习

二、继承

***继承描述的是事物之间的所属关系、当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类,扩展类;而被继承的class称为基类、父类、或者超类
***父类的方法都会继承给子类

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def learing(self):
        print(f'{self.name}正在学习')

    def choice_course(self):
        print('正在选课中'.center(50, '*'))


class MathStudent(Student):
    def choice_course(self):
        super(MathStudent,self).choice_course()
        info="""
                      课程表
            1.高等数学
            2.线性代数
            3.python程序设计语言
        """

        print(info)


m1 = MathStudent('msy', 20)
m1.learing()
m1.choice_course()

上边是一个简单的继承例子

上边就是单继承,那么有的时候也会存在多继承,而在多继承中分为经典类和新式类,不过在python3中已经全部使用新式类。两者的区别在于,经典类的多继承搜索顺序是深度优先,而新式类的搜索顺序是广度优先

私有属性和私有方法

私有属性和私有变量都是以双下划线开头,类的外部(包括子类)不能进行访问和操作,类的内部可以访问和操作

三、多态

不同的对象执行同一个方法返回不同的值
多态其实在我们之前的学习中已经涉及,比较简单,这里就不一一赘述

四、高级特性

类方法、静态方法、实例方法
在这里插入图片描述
类方法和静态方法
类方法:类方法是类对象所拥有的方法,需要用修饰器一般以@clasmethod来标识其为类方法
(1)对于类方法,第一个参数必须是类对象,作为第一个参数(cls是形参,当然也可以使用其他变量名)
(2)能够通过实例对象和类对象去访问
静态方法:静态方法需要用修饰器一般是staticmethod来标识其为静态方法
(1)静态方法不需要多定义参数
(2)能够通过实例对象和类对象去访问

property类属性
方法在调用的时候如果没有参数,我们加上括号不利于理解,所以我们可以使用property类属性帮助我们将类方法转换为类属性,这样我们在调用的时候就不用加上括号,直接调用即可
在这里插入图片描述
在这里插入图片描述

单例模式

简单来说就是一个类只能构建一个对象的设计模式
确保系统中某个对象的唯一性即一个类只能有一个实例非常重要
下边是两种实现单例模式的方法在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【OpenFeign】【源码+图解】【二】注册OpenFeign接口的实例

【OpenFeign】【源码图解】【一】HelloWorld及其工作原理 目录3. 注册OpenFeign接口的实例3. 注册OpenFeign接口的实例 从HelloWorld中我们看到需要显示加入**EnableFeignClients注解才能开启openFeign的功能,因此它就成为我们分析openFeign**的入口,先…

Chrony时间同步服务

目录 一、时间同步 1.概念 2.时间同步在运维工作中的作用 3.时间同步完成方法 (1)NTP时间服务(centos 6 ) (2)Chrony时间服务 二、Chrony时间服务 1.Chrony介绍 2.Chrony的优点 三、Chrony安装 …

逻辑回归(Logistic Regression)原理及过程

目录 一:逻辑回归简介 二:逻辑回归原理 三:逻辑回归 损失函数 四:逻辑回归 梯度下降算法 五:逻辑回归 过程 一:逻辑回归简介 Logistic模型是1938年Verhulst-Pearl在修正非密度方程时提出来的&#xf…

算法刷题打卡第49天:排序数组---计数排序

排序数组 难度:中等 给你一个整数数组 nums,请你将该数组升序排列。 示例 1: 输入:nums [5,2,3,1] 输出:[1,2,3,5]示例 2: 输入:nums [5,1,1,2,0,0] 输出:[0,0,1,1,2,5]计数排…

我与世界杯的故事——达利奇:铜牌闪耀着金光

目录 克罗地亚球队的历史 奇迹出现 心得总结 克罗地亚球队的历史 克罗地亚球队拥有悠久的历史: 1998年首次亮相法国世界杯,克罗地亚就以季军的战绩惊艳众人。 2018年的俄罗斯世界杯,虽然格子军团在决赛中不敌强大的法国,遗憾地…

<Linux进程通信之共享内存>——《Linux》

目录 一、system V共享机制 1.共享内存示意图 2.共享内存数据结构 3.共享内存函数 3.1shmget函数 3.2 shmat函数 3.3 shmdt函数 3.4 shmctl函数 3.5 实例代码: 3.6 结果演示: 4. 创建共享内存 5. 基于共享内存与管道进行访问控制的共享内存读…

(P4)Python plt显示图像

Python plt显示图片 本地可以显示,服务器操作不太行。 plt.plot(x,y) plt.imshow(image) plt.show() # 显示图像(曲线/图片都需要这一行) plt.savefig(xx.png) # 保存图片 fig.savefig(xx.png) 功能相同 # 保存图片在本地执行失败&#xff…

Elasticsearch学习笔记

Elasticsearch学习笔记 ----第1章 Elasticsearch概述-01-开篇02-技术选型03-教学大纲-第2章 Elasticsearch入门-04-入门-环境准备05-入门-RESTful & JSON06-入门-Postman客户端工具07-入门-倒排索引08-入门-HTTP-索引-创建09-入门-HTTP-索引-查询 & 删除10-入门-HTTP-…

Linux 调试之 TRACE_EVENT(一)

文章目录前言一、TRACE_EVENT简介二、TRACE_EVENT() 结构2.1 TRACE_EVENT简介2.2 trace_sched_switch示例2.2.1 Name2.2.2 Prototype2.2.3 Arguments2.2.4 Structure2.2.5 Assignment2.2.6 Print2.3 Format file2.3.1 tracing/events/2.3.2 perf2.3.3 bpftrace2.3.4 bcc2.3.5 S…

逻辑回归 鸢尾花分类预测

目录 一:加载数据 二:数据集划分 三:选择算法 四:网格模型 超参数最优解 五:鸢尾花分类预测 六:预测与实际比对 七:完整源码分享 一:加载数据 from sklearn.datasets import…

Jenkins启动项目时报错问题

问题 在工作中使用jenkins进行项目部署启动时遇到问题,项目构建成功但是发布时一直显示时间增加,但是项目本身并没有问题,使用传统方法部署项目也能正常启动。报错如下图所示: 解决方法 是由于jenkins文件中打印日志的问题&am…

PayPal,Stripe,Square轮询支付系统

轮询展示 展示我们轮询的页面 轮询套餐 根据不同的用户和需求,可以选择不同的套餐 普通版 1500元 1年 1个用户 支持Paypal/Stripe 不限制A站个数 不限制B站个数 不限制提交模式 订单管理 物流管理 风控管理 必要的网站数据处理 24小时远程协助 开始…

springcloud服务消费与熔断

今天与大家分享服务消费与熔断,就是说当我们服务消费者转发到服务生产者时,如果有那一步出现了问题或者error,可以进行服务熔断(服务降级),为了补救系统问题,不让用户使用时看见error报错信息&a…

《Java》String、StringBuffer、StringBuilder有什么区别?

目录 String StringBuffer StringBuilder 总结 ps:昨天在讨论完String的不可变性之后突然想要做一份总结笔记,总结一下String、StringBuffer、StringBuilder的区别 String String是Java中的基础类,提供了各种构造和对字符串的基本操作&am…

Cocos Creater(3.6.1)开发笔记——Typscript

文章目录项目入门关于cocos creator 3.x关于TypeScript新建项目VS setting json配置屏蔽项事件节点添加脚本(事件)案例代码素材使用技巧素材组合固定布局(类似css)项目入门 关于cocos creator 3.x 相当于cocos所有版本的功能的综…

初探MapReduce

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录MapReduce核心思想MapReduce编程模型MapReduce编程实例——词频统计思路1、Map阶段(映射阶段)2、Reduce阶段(归并阶段&#xff09…

VS2019下C#调用C++ DLL详解+数据转换

VS2019下C#调用C DLL详解数据转换 -C#调用OpenCV(c的.dll主要有两种常见的方式:托管和非托管两种形式! 非托管的形式即是采用[DllImport]的形式,这种形式只能调用的C的函数,适合用于简单的图形处理调用,这也…

正交编码器溢出处理

文章目录1.正交编码器1.1 参数特性1.2 应用范围2.正交编码器使用2.1 溢出问题2.2 中断模式2.3 循环模式延伸1.正交编码器 正交编码器一般指的是增量式光栅(磁栅)编码器,通常有三路输出信号,A相、B相、Z相,俗称ABZ编码器…

【2022年度系列工作总结】「国内软件质量调查问卷」针对于本年度软件质量分析总结报告

前提背景 针对于目前的软件行业而言,软件的质量目前越来越被大家所在关注,慢慢的QA以及SQA的角色也变得愈加重要。接下来我就针对于我司(XXX)的相关的实际开发情况对应的【2022年国内软件质量调查问卷】,为大家梳理和…

[附源码]计算机毕业设计Python大学生考勤管理系统论文(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…