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

news/2024/10/28 20:21:18/

文章目录

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


前言

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

一、面向过程

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

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

二、 面向对象

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

三、面向对象的三大特性

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

一、封装

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

下面就是一个简单的封装

class People:def __init__(self, name, age, gender):self.name = nameself.age = ageself.gender = genderdef 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 = nameself.age = agedef 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.ppmy.cn/news/4826.html

相关文章

pytorch从头开始进行文本分类

前言 最近在做实体抽取的时候,一篇文章大约有几千字,按照300字长度进行切割后,会生成数量不等的句子,若是句子少还行,句子多的情况下,则会对造成巨大的计算负担,因为一篇文章中存在关键词的段落…

毫米波电路的PCB设计和加工(第一部分)

毫米波应用要点——相位精度受许多变量影响 从自动驾驶车辆上使用的防碰雷达系统到第五代(5G)高数据速率新无线(NR)网络技术,毫米波(mmWave)电路的应用领域正在快速增长。许多应用正在促进工作…

JavaEE【Spring】:SpringBoot 热部署

文章目录一、添加框架二、Settings 开启项目自动编译三、开启运行中热部署1、低版本配置(idea 2021.2 之前的版本)2、高版本设置(idea 2021.2 之后的版本)四、使用 Debug 启动(非Run)一、添加框架 增加 sp…

【(C语言)数据结构奋斗100天】栈和队列

前言 🏠个人主页:泡泡牛奶 🌵系列专栏:[C语言] 数据结构奋斗100天 本期所介绍的是栈和队列,那么什么是栈呢,什么是队列呢?在知道答案之前,请大家思考一下下列问题: 你如何…

1.cesium简介和环境搭建

目录 一、cesium介绍 cesium是什么? cesium能做什么? cesium的限制? cesium的好处是什么? 二、创建一个简单的cesium 安装node环境 下载cesiumSDK 部署cesium 三、补充说明 Documentation Sandcastle 一、cesium介绍 …

c++-指针

目录声明与相关运算符指针与地址例子指针运算空指针无类型指针const指针声明与相关运算符 1、数据类型 *变量名; 2、两种特殊运算符。 取操作数的内存地址& 取指针对应内存地址上的值 * 注意,内存地址上存储可能会是另一个操作数的指针,因为可以多重…

6266. 使用质因数之和替换后可以取到的最小值

给你一个正整数 n 。 请你将 n 的值替换为 n 的 质因数 之和,重复这一过程。 注意,如果 n 能够被某个质因数多次整除,则在求和时,应当包含这个质因数同样次数。 返回 n 可以取到的最小值。 示例 1: 输入:n 15 输出…

开发1-5年的Java程序员,该学习哪些知识实现涨薪30K?

工作已经8年有余,这8年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西。这8年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为系统维护和发布当救火队员的苦恼。遂决定梳理一下自己所学的东…