独家 | Python中的SOLID原则(附链接)
共 4916字,需浏览 10分钟
·
2021-09-12 19:29
作者:Mattia Cinelli
翻译:朱启轩
校对:欧阳锦
本文约3500字,建议阅读15分钟 本文通过一些Python示例代码介绍了可以提高代码可靠性的SOLID编码准则。
The Single-Responsibility Principle (SRP)
单一任务原则
The Open-Closed Principle (OCP)
开闭原则
The Liskov Substitution Principle (LSP)
Liskov替换原则
The Interface Segregation Principle (ISP)
界面分离原则
The Dependency inversion Principle (DIP)
从属倒置原则
“一个类应该有且只有一个可以被改变的理由”
2) 开闭原则 (OCP
“软件实体 … 应该对拓展升级开放,对调试修改封闭”
3) Liskov 替换原则(LSP)
“那些使用指针或者引用基类的函数必须要在不知情的情况下使用派生类的对象”
4) 界面分离原则 (ISP
“具有很多面向特定客户的界面会比只有一个的通用的界面要好”
对于这个例子,我们有一个抽象类 “Mammal”,它有两个抽象方法:“walk”和“swim”。这两个元素将属于“Human”子类,而只有“swim”将属于“Whale”子类。
实际上,如果我们运行这段代码,我们会得到:
子类whale仍然可以调用方法“walk”,但它不应该这样做,我们必须避免它。
ISP建议的方法是创建更多面向特定用户的界面,而不是一个通用的界面。因此,我们的代码示例变成如下:
现在,每个子类只继承它需要的东西,避免了调用断章取义(错误)的子方法。如果继承了不需要的东西,可能会产生难以捕捉的错误。
这一原则与其他原则紧密相连,具体来说,它告诉我们要保证子类的内容整洁度,排除对子类没有用处的元素。这样做的最终目的是让我们的类能够保持整洁,并将错误最小化。
5) 从属倒置原则(DIP)
因此,抽象类(例如,上面看到的界面)不应该依赖于低级方法,而应该都依赖于第三个界面。
为了更好地解释这个概念,我倾向于认为这是一种信息流。
假设您有一个程序,它接收一组特定的信息(文件、格式等),然后您编写了一个脚本来处理它。
如果这些信息有变化会发生什么?
你将不得不重写你的脚本并调整新的格式。失去与旧文件的兼容性。
然而,您可以通过创建第三个抽象类来解决这个问题,该抽象类将信息作为输入并将其传递给其他抽象类。
这基本上也是API的用途。
这一原则的设计理念有趣在于,它与我们通常的做法相反。
考虑到DIP原则,我们将从项目的尾部开始,我们的代码独立于所输入的内容,它不受更改的影响,并且不受我们的直接控制。
我希望您能在您的代码中运用这些概念,我知道它们是为我准备的。除此以外,我还提供了一些我用来理解这些原则的材料。
R. C. Martin, “The Principles of OOD,” 2013.
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
https://codingwithjohan.com/blog/solid-python-introduction
“Clean Code in Python” by Mariano Anaya
译者简介
朱启轩,康奈尔大学研究生在读,专业领域是应用统计,方向是数据科学。本科毕业于加州大学洛杉矶分校。热爱数据科学,对处理数据,分析数据有自己的独特见解。对新知识充满了渴望,目前正在学习自然语言处理和深度学习方面的知识,希望能认识更多志同道合的人,一起努力,一起进步。
翻译组招募信息
工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。
你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。
其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。
点击文末“阅读原文”加入数据派团队~
转载须知
如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。
发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。
点击“阅读原文”拥抱组织