第7章 Python类型、类、协议 第7.1节 面向对象程序设计的相关知识

【基础篇】python之类的详解(上)—面向对象、类的定义和使用、相关概念 类的详解1 面向对象概念及特征1.1 概念1.2 特征2.类的定义和使用2.1 类的定义2.2 类的使用及相关的概念 在软件开发中,面向对象是我们离不开的东西,从系统设计的角度出发,总是以面向对象的方式对现实世界理解和抽象。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。这一知识点往往在面试过程中也是非常重要的一个环节,让我们一起去看看python中的类是如何实现的。 1 面向对象概念及特征 1.1 概 阅读详情

Python被视为一种面向对象的语言,在介绍Python类相关的内容前,本节对面向对象程序设计相关的概念进行简单介绍。

一、    类和对象(实例)
在面向对象的程序设计(OOP)过程中有两个重要概念:类(class)和对象(object,也被称为实例,instance),其中类是某一批对象的抽象,是抽象的模板。类是由其属性以及支持的方法定义的,类的所有实例都有该类的所有属性和方法,每个对象都属于特定的类,是一个具体存在的实体,是根据类创建出来的一个个具体的“实例”。
类、类型在Python3中是同义词。从很多方面来说,这正是类的定义——一种对象。每个对象都属于特定的类,并被称为该类的实例。在Python中,类名约定使用单数并将首字母大写,如Student和Person。
对象由属性(数据)和方法组成,属性是属于对象的变量,而方法是存储在属性中的函数。每一个对象都从类中继承有相同的方法,但各自的数据可能不同。对象的状态由其属性(如名称)描述,对象的方法可能修改这些属性,因此对象将一系列函数(方法)组合起来,并赋予它们访问一些变量(属性)的权限,而属性可用于在两次方法调用之间存储状态。

二、    子类和超类
一个类的对象(如猪、牛、羊)为另一个类(如家畜)的对象的子集时,前者就是后者的子类,后者是前者的超类(也称为父类、基类)。要定义子类,只需定义多出来的方法和属性,还可能重写一些超类的方法。因此从功能上来说,父类的属性和方法是子类的功能和方法的子集。子类的所有实例都有超类的所有属性和方法。子类比超类会多出特有的属性或方法,或可能重写一些超类的方法。
对于子类和超类,在C++中调用时有两种类型的强制类型转换:
1.    向上类型转换(upcast):将子类型引用转换成父类型引用。
2.    向下类型转换(downcast):将父类型引用转换成子类型引用。对于向下类型转换,必须要显示指定。向下类型转换的原则:父类型引用指向谁才能转换成谁。
而在Python中,则无需关注这种转换,Python编译时不执行类型检查,执行时也不建议使用代码进行类型检查,只关注对象是否有对应方法。

三、    面向对象的特征
Python是一门面对对象编程的语言,面向对象程序设计有三大特征:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)。
1.    封装:对象可能隐藏其内部状态,对外部隐藏有关对象工作原理的细节,使用者无需知道对象的构造就能使用它。
1)    在有些语言如C++中,这意味着对象的状态(属性)只能通过其方法来访问;
2)    封装就是对对象的部分或全部内部数据进行隔离,隐藏数据特征。这是因为对象中的数据(属性)可能有特殊的操作方法,如果通过外部直接访问数据可能导致异常和错误;
3)    在Python中,所有的属性都是公有的,都可以通过外部访问,但直接访问对象的状态时程序员应谨慎行事,因为这可能导致状态不一致,为此Python没有提供对象强制的访问类型限制,但通过命名规则(前导双下划线)可以隐式地定义无法直接访问的内部属性。具体内容请见后面章节。
2.    继承:继承,一个类可以是一个或多个类的子类,在子类没有重写超类(也称父类、基类,下同)方法的情况下,子类可以使用超类(父类)的方法。继承可以让子类获得超类的全部功能,超类实现过的方法,子类不需要重新定义就能自动拥有。
1)    并不是所有语言都支持指定继承多个超类,Python支持继承多个超类;
2)    可以为子类增加新的方法,这些新方法父类不会掌握。如果子类新定义的方法与父类的方法相同,则子类的方法覆盖父类的方法。在程序运行时总是会调用子类的方法而不是父类的方法。
3)    Python对多个超类的使用并不推荐,因为多个超类的情况下,如果某个方法在多个超类中出现,系统可能出现异常。
3.    多态:多态指的是无需知道对象属于哪个类就可调用其方法,对不同类型的对象执行相同的操作。
1)    多态有2种形态
i.    一种是一个超类的多个子类,不同子类中有同样名称的方法,相关方法可能是继承超类的,也可能是子类重写了的,但在调用该方法时,无需知道具体子类的类型。当使用多态方式调用方法时,首先检查父类中是否有此方法,如果没有则编译错误,如果有则再去调用子类重写(Override)【如果重写的话】的此方法,没有重写的话,还是调用从父类继承过来的方法。
ii.    另一种是不同类型都有某些相同的方法,不论该方法是否继承超类、是否方法来自相同的超类、无需关注对应对象是什么类型,只需该对象有对应方法就可以使用。这就是Python支持的“鸭子类型”,关于“鸭子类型”在后面章节专门介绍。
iii.    传统意义的多态主要是指第一种类型的多态,不含第二种类型的多态,所以有人说Python不支持多态,但Python是一种多态语言。
2)    多态是一种运行时行为,不是编译期行为!在编译期间它只知道是一个引用,只有到了执行期,引用才知道指向的是谁。这就是所谓的“软绑定”。

本节介绍了面向对象程序设计相关的基本概念,有关内容涉及面较广,如果大家不好理解,建议自己多找点资料看看。
老猿Python(https://blog.youkuaiyun.com/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!
 

Python3面向对象相关知识 Python是一种支持多种编程范式的语言,包括面向对象编程(Object-Oriented Programming,OOP)。面向对象编程是一种编程模式,它使用“对象”来表示数据和操作数据的方法。面向对象编程在Python中非常有用,特别是在处理复杂的数据结构和系统时,它可以帮助组织和管理代码,使其更加清晰和可维护。 阅读详情

相关推荐

Python程序设计 第7章:Python面向对象编程

Python程序设计 第7章:Python面向对象编程7.1 面向对象编程概述7.1.1 OOP的产生7.1.2 OOP核心思想7.1.3 OOP特征7.2 类和对象7.2.1 类的创建7.2.2 对象的创建7.2.3 类的属性7.2.4 类的方法7.2.5 内部类7.2.6 魔术方法7.3 类间关系7.3.1 依赖关系7.3.2 关联关系7.3.3 继承关系7.4 总结 7.1 面向对象编程概述 7.1.1 OOP的产生 7.1.2 OOP核心思想 7.1.3 OOP特征 7.2 类和对象 7.2.1 类

若北辰 8081

[CANoe] ---CANoe常用窗口介绍

添加CAN IG模块Simulation Setup -> 空白处右击 -> Insert CAN interactive Generator。

M2嵌入式 6572

python之面向对象程序设计基础

  Python 是一门易于学习、功能强大的编程语言。它提供了高效的高级数据结构,还能简单有效地面向对象编程。Python 优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。下面我们来介绍一下python的面向对象程序设计基础。  面向对象程序设计(Object Oriented Programming,OOP)的思想主要针对大型软件设计而提出,它使得软件设计更加灵活,能够很好地支持代码复用和设计复用,并且使得代码具有更好的可读性和可扩展性。Python完全采用了面

jiankang66的博客 1651

CANoe Trace窗口

CANoe 的 Trace 窗口用于实时记录和追溯 CAN 总线报文数据,进行信号解析与变化监测,辅助通信故障诊断、网络性能评估以及测试验证等工作

m0_56208280的博客 5323

MIUI升级后录音神秘消失?别慌!手把手教你从Android/data目录找回宝贵录音文件

本文详细解析了MIUI升级后录音文件消失的原因,并提供了从Android/data目录找回录音文件的实用指南。通过技术分析和步骤演示,帮助小米手机用户解决录音文件丢失问题,同时分享预防措施和高级恢复方案,确保重要录音数据安全。

weixin_30696427的博客 281

4.无限共轭距柯克物镜设计——zemax学习笔记

无限共轭cooker物镜

fly_daerm的博客 1596

Python:面向对象程序设计

面向对象是相对于面向过程而言的,面向对象是一种编程思想,是以类的眼光来看待事物的一种方式。面向过程语言是一种基于功能分析的、以算法为中心的程序设计方法;而面向对象是一种基于结构分析的、以数据为中心的程序设计思想。面向对象有继承、封装和多态三大特性。

燕双嘤 3420

AI 编程组合之deepseek+vscode+cline插件,使用deepseek大模型实现代码自动生成

本文介绍了VSCODE下cline插件的安装结合DeepSeek-V3,ai编程的组合套件,举了两个例子一个是生成登录页面,一个是生成贪吃蛇游戏

技术博客 7万+

【python】面向对象程序设计(基础篇)

使用class关键字来声明一个类,基本格式如下:class类名:"类体说明" #类的功能等进行说明类成员方法成员类是由3部分组成的:类的名称:用关键字class声明类,类名首字母一般大写,比如Dog。类的数据属性:用来存储特征的值(体现对象的特征),简称为成员。如:名字、年龄。类的方法属性:用来对成员进行操作(体现对象的行为),简称为方法。如:学习、睡觉。类体说明:对类的功能等进行说明。

m0_67388084的博客 3485

数据库和BI工程师面试题

 一.数据库 1.Oracle数据库,视图与表的区别?普通视图与物化视图的区别?物化视图的作用? 2.Oracle数据库,有哪几类索引,分别有什么特点? 3.Union与Union All的区别? 4.对游标的理解?游标的分类?使用方法? 5.如何查找和删除表中的重复数据?给出方法或SQL。 6.不借助第三方工具,怎么查看SQL的执行计划? 7.创建索引有哪些需要注意的要点?

web_go_run的专栏 1万+

Python爬虫教程:抓取Android或iOS应用中的数据

随着智能手机的普及,移动应用程序已经成为我们生活中不可或缺的一部分。从社交媒体、在线购物到金融服务和健康管理,几乎所有领域都有相应的手机应用程序(App)服务用户。而这些应用程序通常会存储大量的数据,例如用户行为、产品信息、订单记录等。如果我们能有效地抓取这些数据,可以为数据分析、商业智能、用户行为分析等提供有力支持。本文将重点介绍如何使用Python爬虫技术抓取Android或iOS应用中的数据,尤其是如何从这些应用的后端接口、存储、或网页中提取数据。我们将探讨如何通过反向工程技术访问移动应用中的API接

2201_76125261的博客 801

面向对象程序设计之Python

面向对象程序设计三大特性 封装:根据职责将属性和方法封装到一个抽象的类中 继承:实现代码的重用,相同的代码不需要重复编写 多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度 封装 就是把类的属性和方法封装到类的内部,只能在内部使用,不能在类的外部使用 把属性和方法名前面加两个下划线__,这个属性和方法就成为了类的私有属性和方法 class woman: def __init__(self): self.name = "玛丽" self.__w

m0_47066335的博客 693

[VT虚拟化驱动] 定义类及初始化内存区域

文章目录前言框架整体流程图类的定义初始化内存区域本章代码 前言 为什么不用C而用C++呢? 在单核的情况下,用C还比较方便些,但在多核的情况下,每个核心都需要分配有对应的一个VMX区域,VMCS区域,MsrBitmap区域和栈空间,以及对应的初始化函数,如果使用安装DPC回调的方式在多核情况下进行初始化,只使用同一个初始化函数,当函数被多个CPU核心同时执行,会出现很多意想不到的的错误,我用自旋锁试了一下是依照各种错误,所以果断用C++了,把这些每个核心都需要一份的封装到一个类里 框架整体流程图 类的定义

吾无法无天的博客 1836

第7.28节 《Python类、类型、协议》章节总结

本章详细介绍了Python协议、多态与“鸭子类型”、类、类实例变量、类变量、实例方法、类方法、静态方法、类继承、抽象类、property函数和@property装饰器定义属性访问方法等内容,内容比较多,学习完本章,应该对Python的类知识了解比较全面,掌握“鸭子类型”、property函数和@property装饰器这些非常有Python特色的内容。到上节为止,类的基础知识部分就基本介绍完...

老猿Python 1807

T113-S3-官方SDK分区添加

本篇文章将展示如何编译T113-S3的SDK以及在sdk中添加用户自定义分区,让您能够轻松地开始在您的项目中使用T113-S3芯片。T113-S3是一款功能强大的嵌入式处理器,适用于各种应用,包括物联网、工业自动化和智能家居等。T113-S3-SDK是特别为T113-S3芯片设计的软件开发工具包(Software Development Kit)。它包含了一系列用于开发和定制嵌入式应用程序的工具、库和示例代码,方便开发者在T113-S3平台上开展软件开发工作。

flypig has a dream! 2359

MySQL数据库面试题(2022版)

序列号 内容 链接 1 Java基础知识面试题(2022版) https://blog.csdn.net/qq_43061290/article/details/124023797 2 Java集合容器面试题(2022版) https://blog.csdn.net/qq_43061290/article/details/124043363 3 Java异常面试题(2022版) https://blog.csdn.net/qq_43061290/article/details/124....

拉格朗日的学习笔记 1万+

第7章 Python类型、类、协议目录

第7.1节 面向对象程序设计的相关知识 第7.2节 关于面向对象设计的一些思考 第7.3节 Python特色的面向对象设计:协议、多态及鸭子类型 第7.4节 Python中与众不同的类 第7.5节 揭开Python类中self的面纱 第7.6节 Python中类的继承机制详述 第7.7节 案例详解:Python类继承机制 第7.8节 Python中隐秘的类封装方法 第7.9节...

老猿Python 1830

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

《Python基础教程》第7章笔记:进一步抽象(面向对象编程)

创建自定义对象(尤其是对象类型或类)是一个Python核心概念。在本章中,你将学习如何创建对象,还将学习多态、封装、方法、属性、超类和继承。在面向对象设计时,必须深入理解问题,进而创建出易于理解的设计。

WalkingComputer的博客 1062

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

第8 章 类与面向对象编程

MITPerson.__init__方法首先调用Person.__init__初始化被继承的实例变量self.name,p4 < p1是p4.__lt__(p1)的简写,所以解释器使用与p4的类型Person关联的__lt__方法,按照。Mortgage子类的__init__操作应该先调用Mortgage.__init__,然后再使用该子类的适当描述。Person类中的__lt__方法是使用。Person类型的元素组成的列表,那么调用plist.sort()会使用定义在Person类中的__lt__方法。

weixin_44259522的博客 908

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

小熊带你学Python(十)——面向对象程序设计(类与对象)(一)

把具有相同特征的对象具有的静态属性和动态行为提取集合起来,就可以定义出来需要使用的类。在使用类时候,需要分两步:1、先定义类;2、创建类的实例,通过类的实例就可以访问已定义的类中的属性和方法了。'''类帮助信息,创建类的实例时,输入类名和(后,会显示现在输入的信息'''pass #编写类的属性和方法等内容第一行定义了类的名称,一般第一个字母是大写,尽可能地遵守驼峰命名法。第二行是类的帮助信息,让使用者可以清楚的知道这个类的作用,便于阅读和使用。

u011610904的博客 1758

Python面向对象程序设计讲座【修订】

Python面向对象程序设计讲座 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。 而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的

cnds123的专栏 1360

Python学习中阶:面向对象程序设计

************************************************************************************************************* 终于到了面向对象的编程这部分,看完了基本数据类型、函数以及文件的操作。终于开始 面!向!对!象!的!编!程!啦!、 本部分主要涉及四部分,面向对象的编程、异常处理、进程和线程。...

YOHOO_GY的博客 1360

python_面向对象,以及类的相关知识

一、面向对象 类:就是把相同的事物的动作和特征整合到一起   类是一个抽象的。 对象:基于类创建的一个具体的事物,    也是特征和动作整合一起的 #最初始的写法 people = { 'name': '奥巴马', 'gender': '男', 'age': '50', } def ment1(people): pr...

dianye0807的博客 327

我心中的王者:Python-第12章 类-面向对象的程序设计

class Classname() # 类名称第一个字母必须大写 statement1statementn本节将以银行为例,说明最基本的类观念。程序实例ch12_1.py:Banks的类定义。# 定义银行类别title = 'Taipei Bank' # 定义属性def motto(self): # 定义方法return "以客为尊"执行结果 这个程序没有输出结果。

andyyah晓波的博客 1099

Python 实验五 面向对象程序设计

Python 实验五 面向对象程序设计

qq_72560062的博客 1258
上一篇: 第6.6节 Python动态执行小结
下一篇: 第7.2节 关于面向对象设计的一些思考
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值