Python 语言对面向对象的支持

2023-11-01

其实许多知识点,我们看似已经熟悉还不能再熟悉,而且有些代码已经成为习惯,因为我们对他们太熟悉了,而忘记问一句为什么会这样写,所以适当抽出时间对一些过往的或者熟悉知识进行整理,可能会有意想不到的收获

Python 语言对面向对象的支持

当初 OOP 这种设计模式有多火,就连销售经理在跟客户谈时候,是不是都会用一两次这个术语—面向对象。不过这两年其势头有点被 FP(函数式编程)盖过,不过大多数情况下我还是会选择面向对象方式进行建模和组织代码,那么什么是面向对象编程

什么是面向对象编程

面向对象的编程是一种编程范式,提供了一种结构化程序的方法,将属性和行为绑定到单个对象中。换句话说,面向对象编程是一种对具体的、现实世界的事物进行建模的方法,如汽车,以及事物之间的关系,如公司和雇员、学生和教师,等等。

面向对象的编程是一种编程范式,提供了一种结构化程序的方法,将属性和行为绑定到单个对象中。也就是定义数据结构,数据结构反应一个事物,例如商品是集合名称,是抽象的对商品描述,具有一般性。而具体一个商品是一个实例,具有商品的名称、规格和售价等属性。还有电子邮件,其属性包括收件人列表、主题和正文,以及添加附件和发送等行为。

可能大家对 OOP 认识会有点偏差,就是 OOP 不仅是对现实事物进行建模的方法,设计程序时将真实事物对应到面向对象一个类,面向对象中类是一种数据结构,面向对象 OOP 目标是有效合理地去组织代码。是我们如何实现多人开发有效组织代码的解决方案,这是到今天为止我对面向对象一点认识。

什么是过程式编程

OOP 将现实世界的实体建模为软件对象,这些对象有一些与之相关的数据以及行为以对象形式组织在一起。另一种常见的编程范式是过程化编程,像根据食谱来烹饪一个美味的菜肴一样来设计程序,按照做事流程来组织代码完成一项任务。

关键的启示是,对象是 Python 中面向对象编程的中心,不仅像程序式编程那样代表数据,而且在程序的整体结构中也是如此。

在 python 定义类

基本数据结构,如 numbersstringlist 设计这些基本类型用来表示简单的信息,例如一套课程的,水果或最喜欢的颜色,这样用基本数据类型是无法表示,我们需要更复杂数据类型来描述这些事物。

例如,需要维护一个发布的课程列表。需要存储每套课程的的一些基本信息,如课程标题、难度级别、课程数。

basic_machine_learning_tut = ["basic machine learning",'baisc',12]
basic_python_tut = ["basic python",'baisc',12]
deep_learning_tut = ["basic python",'advance',6]

这种表示方式存在着一些问题

  • 难于管理和维护,当使用引用 basic_machine_learning_tut[0] 我们需要熟悉在列表索引为 0 值对应是课程哪一个属性,是课程名称还是课程数
  • 难于维护,一旦某一条记录有数据遗漏就会发生数据错位,随着带来获取数据不正确。

用类(class)维护数据好处,就是可读性和易于维护

类和实例

类是用来创建用户定义的数据结构。在类中定义的函数称为方法,方法用于如何基于类来创建一个对象,可以用于操作数据,例如定义如何获取数据,如何更新数据。接下来围绕课程这个类,来分享如何定义一个类以及使用一个类。类是抽象对事物描述,是对一类事物的抽象,例如学生、职员和公司,我们根据业务对这些事物进行抽象,给出一个描述,有点类似生成零件设计图纸,其中并不包含任何实际数据,当然也会包含一些对象间共享方法和数据。

有了图纸,我们就可以根据图纸来定义一个实例(对象),对象相对于类是一个具体的数据结构。

在 Python 如何定义一个类

class Tut:
    pass

在 python 中定义类,使用 class 关键字后面给类名称,类作为一个集合通常是首字母大写具有实际意义的名称,可以用驼峰式命名来为类进行命名, pass 通常被用作占位符,避免在方法或函数体中没有实现而抛出一个错误。

所有课程对象必须具备的一些属性可以放一个叫做.__init__() 的方法中定义,可以将方法理解类构造函数。每次创建一个新的课程对象时,在初始化.__init__()通过分配对象的属性值来初始化对象的属性。也就是说,.__init__() 初始化了该类的实例。__init__()的第一个参数总是 self 然后随后是其他参数。


                
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 语言对面向对象的支持 的相关文章

随机推荐

  • 合工大 编译原理 实验

    目前仅有实验一二三四 Windows桌面应用程序项目 开发语言 c 开发环境 Visual Studio 实验一 GitHub 实验二 传送门 实验三 传送门 实验四 传送门 实验一大致功能 支持程序运行时输入关键词 支持已保存关键词的表格
  • Ethereum私有网络的搭建

    好久没有弄以太坊 因为工作需要 需要搭建一个以太坊的私有网络 private network 0 实验环境 3台阿里云服务器 Ubuntu 16 04 分别简称为ali1 ali2 ali3 1 Ethereum节点的编译 安装 这一点无需
  • DAY40:贪心算法(九)单调递增的数字(贪心的思路)

    文章目录 738 单调递增的数字 暴力解也需要看一下 暴力解写法 注意 必须引入 isIncreasing 变量的原因 贪心思路 遍历顺序 最开始的写法 debug测试 逻辑错误 修改版 debug测试 int转化为字符串的原因 to st
  • QMap的排序

    QMap排序方法运用实例 QMap的升序排序 巧妙避开默认排序规则 QMap 如何根据value排序 QMap排序方法运用实例 QMap排序方法运用实例 Music 爱好者的博客 CSDN博客 QVector
  • MsSqlServerJdbcUrl encrypt、trustServerCertificate、trustStore、trustStorePassword hostNameInCertif

    原文链接 为了允许应用程序使用 TLS 加密 从 1 2 版开始 Microsoft JDBC Driver for SQL Server 引入了以下连接属性 encrypt trustServerCertificate trustStor
  • 用CH340给STM32C8T6和野火stm32F103Mini板下载程序需要注意的三个问题

    一 给stm32c8t6下载 1 CH340的引脚RX TX的接法 CH340模块与stm32的串口引脚关系为 RX对应TX TX对应RX 通过串口给stm32烧录程序时要用串口1 即用A9和A10脚 其中A9为TX引脚 A10为RX引脚
  • oracle vm virtualbox右ctrl切换显示模式

    virtualbox里面有个HOME键 注意这个HOME键不一定是键盘上的HOME 而是设定的某一个键 默认的右CTRL 就是所说的HOME 有时候设置的自己不知道怎么切换回来或者找不到控制栏了 就可以按快捷切换 快捷键就是右边的Ctrl
  • C++类模板中的友元函数的声明和定义分别放在哪里

    前面提到了模板的声明和定义推荐都放在头文件中 那么该类中的友元函数的声明和定义该放在哪里呢 因为友元函数并不属于这个类 按照习惯 我们一般把声明放在类中 而把定义放在类的外面 但对于类模板来说 这样就出问题了 很多编译器并不支持将友元函数的
  • 生信笔记

    第一个问题 研究最热门的基因是什么 在NCBI的ftp里面关于人的一些基因信息 在 ftp ftp ncbi nlm nih gov gene 下载即可 其中 gene2pubmed gz 这个是NCBI的entrez ID号对应着该基因发
  • wifi和AP共存方案研究--Android8.0

    目录 Android原生不支持Wifi和AP同时打开 Android对同时开Wifi和AP的限制地方 1 设置 2 framework 3 Fwk与HAL层的代理 4 HAL层部分 可能遇到的问题 附 想象这样一个场景 你的手机通过某种方式
  • MIT 6.s081 Lab2 学习笔记

    因为发现写笔记能促进自己学习 提出问题 所以记笔记 risk 5如何启动 其实是通过kernerl kernel ld跳到汇编文件kernel entry S 里面 OUTPUT ARCH riscv ENTRY entry SECTION
  • JAVA中的@interface

    注解 interface不是接口是注解类 在jdk1 5之后加入的功能 使用 interface自定义注解时 自动继承了java lang annotation Annotation接口 在定义注解时 不能继承其他的注解或接口 interf
  • 【笔试强训选择题】Day27.习题(错题)解析

    作者简介 大家好 我是未央 博客首页 未央 303 系列专栏 笔试强训选择题 每日一句 人的一生 可以有所作为的时机只有一次 那就是现在 文章目录 前言 一 Day27习题 错题 解析 总结 前言 1 解析 A 相关知识点 本题主要考察有关
  • linux 如何隐藏 /proc/目录下的文件(version 2.6 其他版本没适配)

    只为研究而用 禁止用于非法行为 通过加载此模块 来将 proc目录下的文件进行隐藏 使用方式 insmod xx ko hidestr xxxx include
  • Django框架 - 应用命名空间app_name和实例命名空间namespace的区别

    Django框架学习笔记 include 区分app name和namespace 文章目录 前言 app name的两种写法 namespace的写法 namespace默认值 namespace的唯一性 app name的唯一性 结论
  • VMware Linux 可视化增加磁盘

    1 VMware 增加磁盘 2 disks挂载磁盘 此处我挂载的是20G磁盘 截图只是用5G的做过程演示例子 3 验证挂载磁盘
  • Arduino智能物流小车各部分功能代码详解(省工程训练能力综合竞赛)

    文章目录 前言 测试部分 循迹部分 超声波测距部分 避障部分 机械臂控制部分 扫码部分 初赛部分 前言 考虑到之前那篇博客写的太简略 也只给了一个最终代码 比较容易让人看不懂 本篇主要写一些不同功能函数的代码讲解 要看整体部分的请前往我的另
  • QT第五个参数讲解

    二 connect的第五个参数 参数type定义了信号和槽的关联方式 Qt支持6种连接方式 其中3中最主要 1 Qt AutoConnection 自动方式 Qt的默认连接方式 如果信号的发出和接收这个信号的对象同属一个线程 那个工作方式与
  • 第一篇:mysqlcluster数据库集群的搭建和配置

    当系统的规模达到一定程度后 数据库在系统中慢慢成为一个瓶颈 因此需要对数据库进行扩展 数据库集群时一种解决数据库负荷的有效手段 本篇主要是描述了数据库集群如何搭建和配置的过程 一 mysql集群的规划 mysql集群由管理节点 数据节点 m
  • Python 语言对面向对象的支持

    其实许多知识点 我们看似已经熟悉还不能再熟悉 而且有些代码已经成为习惯 因为我们对他们太熟悉了 而忘记问一句为什么会这样写 所以适当抽出时间对一些过往的或者熟悉知识进行整理 可能会有意想不到的收获 Python 语言对面向对象的支持 当初