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

摘要:
本文主要介绍了在使用 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

本文档主要介绍如何使用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向对象编程的博客或书籍而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口数据收发、数据处理、动态图绘制等为应用实例,同时使用 Sourcetrail 代码软件对代码进行可视化阅读便于读者理解。
相关示例代码获取链接如下:https://github.com/leezisheng/Python-OOP-Demo
正文
Python 异常处理原则“请求谅解,而非许可”
我们可能不难发现异常处理完全可以用 if…elif…else 结构来完成,那为什么还要使用异常呢?实际上,**Python 程序员通常秉持着“请求谅解,而非许可”的原则,即他们首先执行代码,然后解决出现的错误。**另一种与之相反的“三思而后行”的原则,实际上恰恰相反。
这样做有很多理由,**但最主要的一点是,避免不必要的 CPU 资源消耗在检查极少出现的情况上。**因此,对于极少数的例外情况,使用异常处理是明智之举。进一步探讨这一点,我们可以发现异常处理的语法在流程控制中同样非常有效。就像 if 语句一样,异常可以用于决策、分支和信息传递。在 Python 代码中,面对可能出现的错误情况,相比于各种各样的判断,使用异常处理结构更容易阅读和维护。
软件设计的六大原则
-  
开放封闭原则(Open-Closed Principle, OCP)
- 软件实体(类、模块、函数等)应对扩展开放,对修改关闭
 - 通过抽象和继承等机制实现
 
 -  
里氏替换原则(Liskov Substitution Principle, LSP)
- 子类可以透明地替换父类使用
 - 子类与父类的参数和返回值应一致
 
 -  
依赖倒置原则(Dependency Inversion Principle, DIP)
- 高层模块不应依赖低层模块,二者都依赖抽象
 - 抽象不应依赖细节,细节应依赖抽象
 
 -  
接口隔离原则(Interface Segregation Principle, ISP)
- 客户端不应依赖它不需要的接口
 - 接口应保持单一和最小粒度
 
 -  
迪米特法则(Law of Demeter, LoD)
- 一个软件实体应当尽可能少地与其他实体发生相互作用
 - 高内聚,低耦合
 
 -  
单一职责原则(Single Responsibility Principle, SRP)
- 一个类应该仅有一个引起它变化的原因
 - 职责应该明确,避免重复
 
 
Python 六大编程原则
-  
KISS (Keep It Simple, Stupid)
- 保持代码简单明了,尽量避免复杂的设计
 - 简单易懂的代码更容易编写、维护和调试
 
 -  
DRY (Don’t Repeat Yourself)
- 避免重复代码,利用函数、模块等特性进行抽象和封装
 - 减少重复劳动,提高编码效率
 
 -  
Pythonic
- 充分利用 Python 的语法特性和标准库
 - 遵循 PEP 8 等 Python 编码规范,编写优雅、高效的代码
 
 -  
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 崇尚简单、优雅的理念
 
 - 遵循 Python 的 20 条设计哲学原则,如"美胜于丑"、"明确胜于隐晦"等 
    
 -  
Testing Is Important
- 重视测试驱动开发,编写全面的单元测试和集成测试
 - 确保代码质量,方便重构和维护
 
 -  
Batteries Included
- 充分利用 Python 丰富的标准库和第三方库
 - 减少重复造轮子,提高开发效率
 
 
PEP8 规范
PEP 8 是 Python 编程的事实标准代码风格指南,其主要内容包括:
-  
命名约定
- 变量、函数、模块使用小写字母加下划线
 - 类名使用驼峰式命名
 - 常量全部大写
 - 受保护的实例属性以单个下划线开头
 - 私有的实例属性以两个下划线开头
 
 -  
缩进和空白
- 使用 4 个空格作为缩进单位
 - 顶层函数和类定义之间空两行
 - 二元运算符两侧各加一个空格
 
 -  
导入风格
- 每个 import 语句独占一行
 - 导入顺序为:标准库、第三方库、自定义库
 
 -  
行长限制
- 每行不超过 79 个字符
 - 如果超出可以使用括号换行
 
 -  
注释和文档化
- 使用英文编写注释和文档
 - 函数使用 docstring 描述
 
 -  
其他建议
- 不要使用制表符进行缩进
 - 避免使用单字母变量名
 - 慎用 
from module import * 
 
PEP 8 的目的是通过一致的代码风格来提高代码的可读性和可维护性。遵守这些约定可以让 Python 代码更加 Pythonic。
PEP 8 规范原文可在如下链接查看:
https://peps.python.org/pep-0008/

中文版可在如下链接查看:
https://www.cnblogs.com/bymo/p/9567140.html













![[JavaScript] 动态获取方法参数名](https://i-blog.csdnimg.cn/direct/ef84f2cd7ee84f59b4190833d2103294.png)







