Python面向对象详解

一文秒懂Python面向对象 在类定义中, 阅读详情

前言

下面从这几个方面来详细详解python面向对象:

初识对象
成员方法
类和对象
构造方法
其它内置方法
封装
继承
类型注解
多态
综合案例

需要Python零基础学习资料的伙伴,可以在公众号【码农资料库】中回复【py】自行领取 包括以下学习资料:

① Python所有方向的学习路线图,清楚各个方向要学什么东西

②Python课程视频,涵盖必备基础、爬虫和数据分析

③ Python实战案例,学习不再是只会理论

④ Python电子好书,从入门到高阶应有尽有

⑤ 华为出品独家Python漫画教程,手机也能学习 ⑥ 历年互联网企业Python面试真题,复习时非常方便

在这里插入图片描述

一、初识对象生活中数据的组织

学校开学,要求学生填写自己的基础信息,一人发一张白纸,让学生自己填。

在这里插入图片描述
改为登记表,打印出来让学生自行填写:

在这里插入图片描述
程序中数据的组织

在程序中简单使用变量来记录学生信息

在这里插入图片描述
使用对象组织数据

在程序中是可以做到和生活中那样,设计表格、生产表格、填写表格的组织形式的。

  1. 在程序中设计表格,我们称之为:设计类(class)

  2. 在程序中打印生产表格,我们称之为:创建对象
    在这里插入图片描述

  3. 在程序中填写表格,我们称之为:对象属性赋值

在这里插入图片描述

二、成员方法类的定义和使用

在上一节中,我们简单了解到可以使用类去封装属性,并基于类创建出一个个的对象来使用。现在我们来看看类的使用语法:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
成员变量和成员方法

那么,什么是类的行为(方法)呢?

在这里插入图片描述
可以看出,类中:

不仅可以定义属性用来记录数据
也可以定义函数,用来记录行为
其中:

类中定义的属性(变量),我们称之为:成员变量
类中定义的行为(函数),我们称之为:成员方法
成员方法的定义语法
在类中定义成员方法和定义函数基本一致,但仍有细微区别:

在这里插入图片描述
可以看到,在方法定义的参数列表中,有一个:self关键字

self关键字是成员方法定义的时候,必须填写的。

它用来表示类对象自身的意思
当我们使用类对象调用方法的是,self会自动被python传入
在方法内部,想要访问类的成员变量,必须使用self

在这里插入图片描述
注意事项

self关键字,尽管在参数列表中,但是传参的时候可以忽略它。如:

在这里插入图片描述
可以看到,在传入参数的时候,self是透明的,可以不用理会它。

三、类和对象现实世界的事物和类

在这里插入图片描述
现实世界的事物也有属性和行为,类也有属性和行为。使用程序中的类,可以完美的描述现实世界的事物。

类和对象

基于类创建对象的语法:

在这里插入图片描述
类只是一种程序内的“设计图纸”,需要基于图纸生产实体(对象),才能正常工作这种套路,称之为:面向对象编程。

使用类和对象描述现实事物

在现实中,生产事物

在这里插入图片描述
在程序中通过类来描述

在这里插入图片描述
基于类创建对象

在这里插入图片描述
这就是面向对象编程:设计类,基于类创建对象,由对象做具体的工作。

四、构造方法属性(成员变量)的赋值

在这里插入图片描述
构造方法

Python类可以使用:init()方法,称之为构造方法。

可以实现:

在创建类对象(构造类)的时候,会自动执行。
在创建类对象(构造类)的时候,将传入参数自动传递给__init__方法使用。

在这里插入图片描述
构造方法注意事项

重要的事情说三遍,构造方法名称:init init init , 千万不要忘记init前后都有2个下划线
构造方法也是成员方法,不要忘记在参数列表中提供:self
在构造方法内定义成员变量,需要使用self关键字

在这里插入图片描述
这是因为:变量是定义在构造方法内部,如果要成为成员变量,需要用self来表示。

五、其它内置方法魔术方法

上文学习的__init__ 构造方法,是Python类内置的方法之一。

这些内置的类方法,各自有各自特殊的功能,这些内置方法我们称之为:魔术方法

在这里插入图片描述
str 字符串方法

在这里插入图片描述
当类对象需要被转换为字符串之时,会输出如上结果(内存地址)

内存地址没有多大作用,我们可以通过__str__方法,控制类转换为字符串的行为。

在这里插入图片描述
方法名:str
返回值:字符串
内容:自行定义
lt 小于符号比较方法

在这里插入图片描述
直接对2个对象进行比较是不可以的,但是在类中实现__lt__方法,即可同时完成:小于符号 和 大于符号 2种比较

在这里插入图片描述
le 小于等于比较符号方法

魔术方法:__le__可用于:<=、>=两种比较运算符上。

在这里插入图片描述
eq,比较运算符实现方法

在这里插入图片描述
不实现__eq__方法,对象之间可以比较,但是是比较内存地址,也即是:不同对象==比较一定是False结果。

实现了__eq__方法,就可以按照自己的想法来决定2个对象是否相等了。

六、封装面向对象的三大特性

面向对象编程,是许多编程语言都支持的一种编程思想。

简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发。

面向对象包含3大主要特性:

封装
继承
多态
封装
封装表示的是,将现实世界事物的:

属性
行为
封装到类中,描述为:

成员变量
成员方法

在这里插入图片描述
从而完成程序对现实世界事物的描述。

对用户隐藏的属性和行为

现实世界中的事物,有属性和行为。

但是不代表这些属性和行为都是开放给用户使用的。

在这里插入图片描述
苹果越狱、安卓root,也是为了突破权限使用这些对用户隐藏的属性和行为。

私有成员

既然现实事物有不公开的属性和行为,那么作为现实事物在程序中映射的类,也应该支持。

类中提供了私有成员的形式来支持。

私有成员变量
私有成员方法
定义私有成员的方式非常简单,只需要:

私有成员变量:变量名以__开头(2个下划线)
私有成员方法:方法名以__开头(2个下划线)

在这里插入图片描述
即可完成私有成员的设置

使用私有成员

在这里插入图片描述
私有成员无法被类对象使用,但是可以被其它的成员使用。

在这里插入图片描述

七、继承继承的引出

在这里插入图片描述
如果你是设计师,你会如何选择?

每一代新款手机,都从零开始出设计图
基于老款的设计图,修修改改

在这里插入图片描述
单继承
在这里插入图片描述
在这里插入图片描述
继承分为:单继承和多继承

使用如图语法,可以完成类的单继承。

继承表示:将从父类那里继承(复制)来成员变量和成员方法(不含私有)

多继承

Python的类之间也支持多继承,即一个类,可以继承多个父类

在这里插入图片描述
在这里插入图片描述
多继承注意事项

多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级。即:先继承的保留,后继承的被覆盖。

在这里插入图片描述

八、类型注解复写

子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。

即:在子类中重新定义同名的属性或方法即可。

在这里插入图片描述
调用父类同名成员

一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员

如果需要使用被复写的父类的成员,需要特殊的调用方式:

在这里插入图片描述
8.1 变量的类型注解

为什么需要类型注解

在PyCharm中编写代码,我们经常能够见到如下提示:

在这里插入图片描述
自动提示可用方法,因为PyCharm确定这个对象,是list类型。

同样,我们换一份代码:

定义一个函数func,接收一个参数data

你会发现,PyCharm不会在做出任何提示了

在这里插入图片描述
又或者当我们调用方法,进行传参的时候(快捷键ctrl + p弹出提示):

在这里插入图片描述
类型注解

Python在3.5版本的时候引入了类型注解,以方便静态类型检查工具,IDE等第三方工具。

类型注解:在代码中涉及数据交互的地方,提供数据类型的注解(显式的说明)。

主要功能:

帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
帮助开发者自身对变量进行类型注释
支持:

变量的类型注解
函数(方法)形参列表和返回值的类型注解
类型注解的语法

为变量设置类型注解

基础语法: 变量: 类型

在这里插入图片描述
在这里插入图片描述
除了使用 变量: 类型, 这种语法做注解外,也可以在注释中进行类型注解。

语法:

type: 类型

在这里插入图片描述
为变量设置注解,显示的变量定义,一般无需注解:

在这里插入图片描述
如图,就算不写注解,也明确的知晓变量的类型

在这里插入图片描述
类型注解的限制

类型注解主要功能在于:

帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
帮助开发者自身对变量进行类型注释(备注)
并不会真正的对类型做验证和判断。

也就是,类型注解仅仅是提示性的,不是决定性的

在这里插入图片描述
如图代码,是不会报错的哦。

8.2 函数(方法)的类型注解

函数(方法)的类型注解 - 形参注解

在这里插入图片描述
如图所示:

在编写函数(方法),使用形参data的时候,工具没有任何提示
在调用函数(方法),传入参数的时候,工具无法提示参数类型
这些都是因为,我们在定义函数(方法)的时候,没有给形参进行注解

函数和方法的形参类型注解语法:

在这里插入图片描述
函数(方法)的类型注解 - 返回值注解

同时,函数(方法)的返回值也是可以添加类型注解的。

语法如下:

在这里插入图片描述
8.3 Union类型

在这里插入图片描述
使用Union[类型, …, 类型]

可以定义联合类型注解

Union联合类型注解,在变量注解、函数(方法)形参和返回值注解中,均可使用。

在这里插入图片描述

九、多态

多态,指的是:多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。如何理解?

在这里插入图片描述
同样的行为(函数),传入不同的对象,得到不同的状态。

在这里插入图片描述
多态常作用在继承关系上.

比如

函数(方法)形参声明接收父类对象
实际传入父类的子类对象进行工作
即:

以父类做定义声明
以子类做实际工作
用以获得同一行为, 不同状态
抽象类(接口)

细心的同学可能发现了,父类Animal的speak方法,是空实现

在这里插入图片描述
为什么要使用抽象类呢?

在这里插入图片描述
提出标准后,不同的厂家各自实现标准的要求。

抽象类就好比定义一个标准,

包含了一些抽象的方法,要求子类必须实现。

在这里插入图片描述

十、综合案例数据分析案例

某公司,有2份数据文件,现需要对其进行分析处理,计算每日的销售额并以柱状图表的形式进行展示。

在这里插入图片描述
数据内容

在这里插入图片描述
1月份数据是普通文本,使用逗号分割数据记录,从前到后分别是(日期,订单id,销售额,销售省份)
2月份数据是JSON数据,同样包含(日期,订单id,销售额,销售省份)
需求分析

在这里插入图片描述
作为面向对象的程序员,我们全程将使用面向对象的思想来进行任务的开发。

Python——面向对象 阅读详情

相关推荐

Python——对象

在Python中定义什么是对象,拿球做例子。可以操作一个球,比如捡球、踢球、抛球等。我们把这些操作称为动作。还可以通过颜色、重量和大小来描述一个球。这些就是球的属性。在Python中,一个对象的特征也称为属性,动作称为方法。

surymy 3万+

Python基础—面向对象(超详版)

面向对象是一种编程范式,它将程序中的数据和操作封装在一个对象中,从而使得程序更加模块化、可重用和易于维护。在面向对象编程中,对象是类的实例化,类是一种抽象的数据类型,它定义了一组属性和方法。面向对象编程的核心思想是封装继承和多态。封装是将数据和操作封装在一个对象中,隐藏对象的内部实现细节,只暴露必要的接口给外部访问。继承是通过继承父类的属性和方法,来创建一个新的子类,子类可以重写父类的属性和方法,从而实现更加灵活的功能。多态是指同一个方法可以根据不同对象的实现方式,实现不同的行为。

weixin_50804299的博客 2万+

Python 面向对象详解

类

924107590的博客 2503

Python面向对象详解(非常详细)

面向对象编程(Object-Oriented Programming,OOP)是一种常用的编程思想,它强调万物皆对象,因此在编程时我们可以将现实世界中的事物抽象成程序中的对象,从而更好实现软件的设计与开发。与传统的基于函数的编程不同,面向对象编程注重于将数据与行为封装在一起,即对象既包含数据状态,还包含可调用的行为方法。面向对象编程的特点在于,它具有封装、继承和多态三大特性。封装意味着将对象的状态和行为进行封装,使其对外只暴露必要的接口,从而提高了安全性和可维护性;

ZTLJQ的博客 3万+

python面向对象详解

介绍了python面向对象编程方法

Jarrodche的博客 1081

详解python面向对象

详解python面向对象

FuncPlotCalc 993

python 面向对象全面详解

目录   一、对面向对象的理解 1、面向对象的编程---object oriented programming 2、python面向对象的重要术语: 3、函数和面向对象编程的区别 二、封装、继承、多态 1、封装(Encapsulation) 2、继承(Inheritance) 3、多态(Polymorphism) 三、面向对象的各种方法 1、静态方法  (用这个装饰器来表示 ...

日入上万 5万+

【Python】Python面向对象详解

面向对象的官方解释“把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。知乎上比较有趣的解释一句话说明什么是面向对象?你个士鳖,你们全家都是士鳖!好像有人说过这样的话,当头棒喝的方式虽然情感上不易接受,但记忆效果十分显著。

qq_60491112的博客 1646

python面向对象详解_Python 面向对象详解

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。接下来我们先来简单的了解下面向对象的一些基本特征。面向对象技术简...

weixin_39859954的博客 136

Python中的面向对象编程详解(上)

这篇文章主要介绍了Python中的面向对象编程详解(上),本文讲解了创建类、实例化类、类属性、特殊方法内建属性、静态变量属性、实例变量属性、方法属性、静态方法、类方法等内容,需要的朋友可以参考下 创建类 Python 类使用 class 关键字来创建。简单的类的声明可以是关键字后紧跟类名: class ClassName(bases): 'class documentation strin...

python入门教程 2885

火山引擎大模型语音合成双向流式API实战:Python实现与优化指南

本文详细介绍了如何利用火山引擎大模型语音合成双向流式API,通过Python实现低延迟、实时的语音合成应用。文章从核心协议解析入手,提供了完整的Python客户端实现代码,并分享了连接复用、错误重试、与LLM流式输出集成等实战优化技巧,帮助开发者快速构建智能客服、实时语音助手等AI应用。

n8m7b6v5c4的博客 1220

Python之面向对象详解

Python之面向对象详解 文章目录Python之面向对象详解一、对面向对象的理解1、面向对象的编程———object oriented programming2、面向对象的重要术语3、函数和面向对象编程的区别二、封装,继承,多态1、封装(Encapsulation)2、继承(Inheritance)3、多态(Polymorphism)三、面向对象的各种方法1、静态方法 (用这个装饰器来表示 @staticmethod )2、类方法(用这个装饰器来表示 @classmethod)3、属性方法(用这个装

prigilm的博客 511

国内网络环境下Leaflet加载OpenStreetMap地图的5种替代方案(附可用瓦片地址)

本文针对国内网络环境下Leaflet加载OpenStreetMap地图的常见问题,提供了5种可用的瓦片替代方案,包括OpenStreetMap.fr HOT、OpenStreetMap.de、CartoDB、Stamen和Thunderforest,并附上详细的代码示例和选择建议,帮助开发者解决地图加载问题。

qsc901234的博客 1706

Python之面向对象详解(一篇足矣)

本文介绍了面向对象的基本概念:对象、self、成员(类变量和实例变量)、方法(绑定方法、类方法、静态方法)、属性(绑定方法 + 特殊装饰器 组合)。面向对象的三大特性:封装、继承、多态;除此之外对继承进行了扩展:mro和c3算法,内置函数的补充;异常处理等等。

小峰编程 5795

Allan方差读图分析IMU误差指标

Allan方差标定IMU参数实测分析

weixin_44927558的博客 3567

SECS/GEM协议学习教程

摘要:SECS/GEM是半导体制造设备通信的国际标准,定义了主机系统与设备间的通信规范,包括设备控制、状态监控、数据采集等功能。协议采用分层架构(应用层、消息层、传输层、物理层),支持关键消息类型如S1F13(建立通信)、S2F13(数据采集)等。通信流程涵盖建立连接、数据交换和终止会话,并通过状态变量(SVID)、事件(CEID)等实现实时交互。典型应用包括设备初始化、报警处理及配方管理,需处理数据类型(如U2、A、L)和通信调试问题。

GitHub个人仓库地址:https://github.com/feiyuluoye ; 个人塔罗牌占卜平台:http://118.126.82.12:8080/ ; 欢迎广大Coding友共同交流讨论。 2067

一文详解Python面向对象

Python是一门既可以面向过程,又能面向对象的语言,对于面向对象的语言都有三大共同的基本特征: - 封装 - 继承 - 多态

阳寜的博客 478

信号检测算法的MATLAB仿真:能量检测、循环平稳检测和匹配滤波检测

根据具体的应用场景和要求,选择合适的信号检测算法可以提高系统的性能和可靠性。在无线电通信中,信号检测是一项重要的任务,它用于检测和识别接收到的信号。在本文中,我们将介绍三种常用的信号检测算法:能量检测、循环平稳检测和匹配滤波检测,并提供相应的MATLAB源代码进行仿真实现。在上述代码中,我们首先设置了能量检测的阈值,然后生成了一个包含1000个服从正态分布的随机信号样本的信号。在上述代码中,我们首先设置了信号模板,然后生成了一个包含信号模板的信号样本。最后,通过比较相关性的最大值与阈值来判断信号是否存在。

PixelLancer的博客 1363
上一篇: Python学习干货,如何用Python进行数据分析?
下一篇: 我,失业后跑滴滴,没赚到钱还倒贴3000
黑客老许
博客等级 码龄8年 6158粉丝 1028原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值