全网最适合入门的面向对象编程教程:28 类和对象的Python实现-Python编程原则、哲学和规范大汇总

news2024/9/9 4:59:34

全网最适合入门的面向对象编程教程:28 类和对象的 Python 实现-Python 编程原则、哲学和规范大汇总

image

摘要:

本文主要介绍了在使用 Python 进行面向对象编程时,Python 异常处理的原则-“请求谅解,而非许可”,以及软件设计和 Python 的编程原则,同时介绍了 PEP8 规范。

原文链接:

FreakStudio的博客

往期推荐:

可能是全网最适合入门的面向对象编程教程:Python实现-嵌入式爱好者必看!

全网最适合入门的面向对象编程教程:00 面向对象设计方法导论

全网最适合入门的面向对象编程教程:01 面向对象编程的基本概念

全网最适合入门的面向对象编程教程:02 类和对象的Python实现-使用Python创建类

全网最适合入门的面向对象编程教程:03 类和对象的Python实现-为自定义类添加属性

全网最适合入门的面向对象编程教程:04 类和对象的 Python 实现-为自定义类添加方法

全网最适合入门的面向对象编程教程:05 类和对象的Python实现-PyCharm代码标签

全网最适合入门的面向对象编程教程:06 类和对象的 Python 实现-自定义类的数据封装

全网最适合入门的面向对象编程教程:07 类和对象的Python实现-类型注解

全网最适合入门的面向对象编程教程:08 类和对象的 Python 实现-@property 装饰器

全网最适合入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系

全网最适合入门的面向对象编程教程:10 类和对象的Python实现-类的继承和里氏替换原则

全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法

全网最适合入门的面向对象编程教程:12 类和对象的 Python 实现-Python 使用 logging 模块输出程序运行日志

全网最适合入门的面向对象编程教程:13 类和对象的 Python 实现-可视化阅读代码神器 Sourcetrail 的安装使用

全网最适合入门的面向对象编程教程:14 类和对象的Python实现-类的静态方法和类方法

全网最适合入门的面向对象编程教程:15 类和对象的Python实现-__slots__魔法方法

全网最适合入门的面向对象编程教程:16 类和对象的Python实现-多态、方法重写与开闭原则

全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“

全网最适合入门的面向对象编程教程:18 类和对象的Python实现-多重继承与PyQtGraph串口数据绘制曲线图

全网最适合入门的面向对象编程教程:19 类和对象的 Python 实现-使用 PyCharm 自动生成文件注释和函数注释

全网最适合入门的面向对象编程教程:20 类和对象的 Python 实现-组合关系的实现与 CSV 文件保存

全网最适合入门的面向对象编程教程:21 类和对象的 Python 实现-多文件的组织:模块 module 和包 package

全网最适合入门的面向对象编程教程:22 类和对象的Python实现-异常和语法错误

全网最适合入门的面向对象编程教程:23 类和对象的 Python 实现-抛出异常

全网最适合入门的面向对象编程教程:24 类和对象的Python实现-异常的捕获与处理:try/except语句、文件读写示例、Exception引用

全网最适合入门的面向对象编程教程:25 类和对象的 Python 实现-Python 判断输入数据类型

全网最适合入门的面向对象编程教程:26 类和对象的Python实现-上下文管理器和with语句

更多精彩内容可看:

CM3调试系统简析

肝了半个月,嵌入式技术栈大汇总出炉

比赛获奖的武林秘籍:09 一文速通计算机设计大赛,比赛人必看的获奖秘籍

比赛获奖的武林秘籍:08 一文速通光电设计大赛,电子人必看

比赛获奖的武林秘籍:07 一文速通电子设计大赛,电子人必看的获奖秘籍!

比赛获奖的武林秘籍:06 5 分钟速通比赛路演答辩,国奖选手的血泪经验!

比赛获奖的武林秘籍:05 电子计算机类比赛国奖队伍技术如何分工和学习内容

比赛获奖的武林秘籍:04 电子类比赛嵌入式开发快速必看的上手指南

比赛获奖的武林秘籍:03 好的创意选取-获得国奖的最必要前提

比赛获奖的武林秘籍:02 国奖秘籍-大学生电子计算机类竞赛快速上手的流程,小白必看

比赛获奖的武林秘籍:01 如何看待当代大学生竞赛中“卷”“祖传老项目”“找关系”的现象?

比赛获奖的武林秘籍:00 学科竞赛-工科类大学生绕不开的话题,你了解多少?

文档和代码获取:

可访问如下链接进行对文档下载:

https://github.com/leezisheng/Doc

image

本文档主要介绍如何使用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向对象编程的博客或书籍而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口数据收发、数据处理、动态图绘制等为应用实例,同时使用 Sourcetrail 代码软件对代码进行可视化阅读便于读者理解。

相关示例代码获取链接如下:https://github.com/leezisheng/Python-OOP-Demo

正文

Python 异常处理原则“请求谅解,而非许可”

我们可能不难发现异常处理完全可以用 if…elif…else 结构来完成,那为什么还要使用异常呢?实际上,**Python 程序员通常秉持着“请求谅解,而非许可”的原则,即他们首先执行代码,然后解决出现的错误。**另一种与之相反的“三思而后行”的原则,实际上恰恰相反。

这样做有很多理由,**但最主要的一点是,避免不必要的 CPU 资源消耗在检查极少出现的情况上。**因此,对于极少数的例外情况,使用异常处理是明智之举。进一步探讨这一点,我们可以发现异常处理的语法在流程控制中同样非常有效。就像 if 语句一样,异常可以用于决策、分支和信息传递。在 Python 代码中,面对可能出现的错误情况,相比于各种各样的判断,使用异常处理结构更容易阅读和维护。

软件设计的六大原则

  1. 开放封闭原则(Open-Closed Principle, OCP)

    • 软件实体(类、模块、函数等)应对扩展开放,对修改关闭
    • 通过抽象和继承等机制实现
  2. 里氏替换原则(Liskov Substitution Principle, LSP)

    • 子类可以透明地替换父类使用
    • 子类与父类的参数和返回值应一致
  3. 依赖倒置原则(Dependency Inversion Principle, DIP)

    • 高层模块不应依赖低层模块,二者都依赖抽象
    • 抽象不应依赖细节,细节应依赖抽象
  4. 接口隔离原则(Interface Segregation Principle, ISP)

    • 客户端不应依赖它不需要的接口
    • 接口应保持单一和最小粒度
  5. 迪米特法则(Law of Demeter, LoD)

    • 一个软件实体应当尽可能少地与其他实体发生相互作用
    • 高内聚,低耦合
  6. 单一职责原则(Single Responsibility Principle, SRP)

    • 一个类应该仅有一个引起它变化的原因
    • 职责应该明确,避免重复

Python 六大编程原则

  1. KISS (Keep It Simple, Stupid)

    • 保持代码简单明了,尽量避免复杂的设计
    • 简单易懂的代码更容易编写、维护和调试
  2. DRY (Don’t Repeat Yourself)

    • 避免重复代码,利用函数、模块等特性进行抽象和封装
    • 减少重复劳动,提高编码效率
  3. Pythonic

    • 充分利用 Python 的语法特性和标准库
    • 遵循 PEP 8 等 Python 编码规范,编写优雅、高效的代码
  4. Zen of Python

    • 遵循 Python 的 20 条设计哲学原则,如"美胜于丑"、"明确胜于隐晦"等
      • Beautiful is better than ugly.
      • Explicit is better than implicit.
      • Simple is better than complex.
      • Complex is better than complicated.
      • Flat is better than nested.
      • Sparse is better than dense.
      • Readability counts.
      • Special cases aren’t special enough to break the rules.
      • Although practicality beats purity.
      • Errors should never pass silently.
      • Unless explicitly silenced.
      • In the face of ambiguity, refuse the temptation to guess.
      • There should be one-- and preferably only one --obvious way to do it.
      • Although that way may not be obvious at first unless you’re Dutch.
      • Now is better than never.
      • Although never is often better than right now.
      • If the implementation is hard to explain, it’s a bad idea.
      • If the implementation is easy to explain, it may be a good idea.
      • Namespaces are one honking great idea – let’s do more of those!
      • Python is designed to be readable, and, well, Pythonic.
    • 体现 Python 崇尚简单、优雅的理念
  5. Testing Is Important

    • 重视测试驱动开发,编写全面的单元测试和集成测试
    • 确保代码质量,方便重构和维护
  6. Batteries Included

    • 充分利用 Python 丰富的标准库和第三方库
    • 减少重复造轮子,提高开发效率

PEP8 规范

PEP 8 是 Python 编程的事实标准代码风格指南,其主要内容包括:

  1. 命名约定

    • 变量、函数、模块使用小写字母加下划线
    • 类名使用驼峰式命名
    • 常量全部大写
    • 受保护的实例属性以单个下划线开头
    • 私有的实例属性以两个下划线开头
  2. 缩进和空白

    • 使用 4 个空格作为缩进单位
    • 顶层函数和类定义之间空两行
    • 二元运算符两侧各加一个空格
  3. 导入风格

    • 每个 import 语句独占一行
    • 导入顺序为:标准库、第三方库、自定义库
  4. 行长限制

    • 每行不超过 79 个字符
    • 如果超出可以使用括号换行
  5. 注释和文档化

    • 使用英文编写注释和文档
    • 函数使用 docstring 描述
  6. 其他建议

    • 不要使用制表符进行缩进
    • 避免使用单字母变量名
    • 慎用 from module import *

PEP 8 的目的是通过一致的代码风格来提高代码的可读性和可维护性。遵守这些约定可以让 Python 代码更加 Pythonic。

PEP 8 规范原文可在如下链接查看:

https://peps.python.org/pep-0008/

image

中文版可在如下链接查看:

https://www.cnblogs.com/bymo/p/9567140.html

image

在这里插入图片描述

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

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

相关文章

什么是安全编程?

安全编程(Secure Programming)是一种编程方法论,旨在通过编写安全可靠的代码来保护计算机系统和数据的安全性。它涵盖了软件设计、开发、测试和维护的整个生命周期,旨在最大程度地降低软件漏洞和安全缺陷的风险。以下是对安全编程…

【前端 20】Element-UI快速入门

探索Element UI组件库:快速搭建Vue应用的必备工具 在现代Web开发中,Vue.js以其轻量级和灵活性赢得了广泛的关注。而Element UI,作为Vue.js的一个UI组件库,更是为开发者们提供了丰富、易用的前端组件,极大地加速了开发过…

Spring源码(八)--Spring实例化的策略

Spring实例化的策略有几种 ,可以看一下 InstantiationStrategy 相关的类。 UML 结构图 InstantiationStrategy的实现类有 SimpleInstantiationStrategy。 CglibSubclassingInstantiationStrategy 又继承了SimpleInstantiationStrategy。 InstantiationStrategy I…

Java----反射

什么是反射? 反射就是允许对成员变量、成员方法和构造方法的信息进行编程访问。换句话来讲,就是通过反射,我们可以在不需要创建其对象的情况下就可以获取其定义的各种属性值以及方法。常见的应用就是IDEA中的提示功能,当我…

摆弄it:越走越深

在英语中,it是一个单词,就是“它”,这是众所周知的事情。今天,我们就来摆弄一下it,摆弄一下“它”,看看能摆弄出什么名堂来。 一、它是它自己 it 大家都知道,同样,itself&#xff0…

大模型算法面试题(十七)

本系列收纳各种大模型面试题及答案。 1、LoRA权重是否可以合入原模型 LoRA权重可以合入原模型。LoRA(Low-Rank Adaptation of Large Language Models)是一种用于微调大型语言模型的低秩适应技术。它通过训练低秩矩阵,并将这些参数注入到原始…

onlyoffice用nginx反向代理

我对于onlyoffice的需求就是当个在线编辑器使用。在集成react的时候之前都是写的绝对路径的地址,这样在需要迁移应用的时候就造成了巨大的麻烦,所以我决定用nginx做反向代理,这样我集成的时候就不用每次都修改源码中的地址了。 一开始写的代…

LINUX进程间的通信(IPC)--信号

一、概念 信号通信,其实就是内核向用户空间进程发送信号,只有内核才能发信号,用户空间进程不能发送信号。信号已经是存在内核中的了,不需要用户自己创建。 信号通信的框架 * 信号的发送(发送信号进程)&am…

阿联酋云手机怎么做TikTok引流?

根据字节跳动广告资源的数据显示,2024年初,TikTok在阿联酋拥有1073万18岁及以上用户,其广告覆盖率达到当地互联网用户群的113%。从2023年初到2024年初,TikTok在阿联酋的潜在广告覆盖率增加了250万,增长率达30.4%。特别…

基于ant-design-vue3多功能操作表格,表头序号为动态添加记录按钮,鼠标在表格记录行,当前行序号显示删除按钮

由于项目需要,并考虑到尽可能让空间利用率高,因此定制开发一个表格组件,组件功能主要是在序号表头位置为添加按钮,点击按钮,新增一行表格数据;表格数据删除不同于以往表格在操作栏定义删除按钮,…

深度学习(概念相关)

深度学习(论文相关) 深度学习一些概念 通过阅读论文可以理解提取数据特征的重要性 深度学习学习怎么去提取特征 应用领域 深度学习应用: 输入:图像输入或者文字输入 算法:还是基础的模块计算 神经网络中的参数几千…

[JavaScript] 动态获取方法参数名

JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言&am…

Java导出Excel给每一列设置不同样式示例

Excel导出这里不讲,方法很多,原生的POI可以参照 Java原生POI实现的Excel导入导出(简单易懂) 这里只说怎么给Excel每一列设置不同的样式,比如下面这样的 直接上代码 Overridepublic void exportTemplate(HttpServletRe…

昇思25天学习打卡营第23天|CV-ResNet50迁移学习

打卡 目录 打卡 迁移学习 实战练习 数据准备 数据处理 数据处理函数 数据处理流程 数据可视化 训练模型 构建Resnet50网络 固定特征进行训练 network 的输出 训练和评估 可视化模型预测 通过本文,了解迁移学习的重点在于,了解你的模型结构…

LGA-4500激光气体分析仪说明手册

目 录 阅 读 说 明 I 用户须知 I 概况 I 注意和警示信息 I 供货和运输 III 质保和维修 III 联系方式 III 一、简介 1 1.1概要 1 1.2测量原理 1 1.2.1单线光谱技术 1 1.2.2激光频率扫描技术 2 1.2.3谱线展宽自动修正技术 2 1.3系统组成 2 1.4系统特点 3 1.5系统指标 4 1.6激光产…

决策树可解释性分析

决策树可解释性分析 决策树是一种广泛使用的机器学习算法,以其直观的结构和可解释性而闻名。在许多应用场景中,尤其是金融、医疗等领域,模型的可解释性至关重要。本文将从决策路径、节点信息、特征重要性等多个方面分析决策树的可解释性&…

Thymeleaf(看这一篇就够了)

目录: Thymeleaf变量输出操作字符串&时间条件判断迭代遍历使用状态变量获取域中的数据URL写法相关配置 Thymeleaf Thymeleaf是一款用于渲染XML/HTML5内容的模板引擎,类似JSP。它可以轻易的与SpringMVC等Web框架进行集成作为Web应用的模板引擎。Spri…

暄桐林曦老师推荐书单——《菜根谭》

暄桐是一间传统美学教育教室,创办于2011年,林曦是创办人和授课老师,教授以书法为主的传统文化和技艺,皆在以书法为起点,亲近中国传统之美,以实践和所得,滋养当下生活。      在暄桐教室的课…

机械运动、工控机概念整理

Signal : 信号 pul 【pulse】是驱动脉冲信号,发一个脉冲,电机走一步。 dir是方向控制信号,控制电机正转或反转。 ena是使能信号,这个信号必须开启,才能驱动电机。 voltage: 电压 VCC&#…

Python软件开发:AI毕业设计生成器引领未来

🌟 革新软件开发:Python毕业设计生成器引领未来 🚀 目录 🌟 革新软件开发:Python毕业设计生成器引领未来 🚀🎓 课题简介🌟 开发目的📈 开发意义 📚 研究方法&…