SOLID 原则适用于任何面向对象的语言,但在本文中我将重点关注它们在 Python 应用程序中的含义。...我最初以 PHP 为基础撰写有关 SOLID 原则的文章,但由于此处的课程可以轻松应用于任何面向对象的语言,我认为我会考虑使用 Python 重新编写它。...如果您只熟悉 PHP 或 Python,那么这将是学习另一面的一个很好的学习资源。 在这里我们还应该注意,Python 并没有真正的接口系统,所以我使用元类来创建所需的情况。...有关元类的更多说明,请参阅Python 中面向对象编程入门文章的基础知识中的接口部分。...SOLID 是一个首字母缩写词,代表以下内容: 单一职责原则 开放/封闭原则 Liskov替代原则 接口隔离原则 依赖倒置原则 我们将依次解析它们。
内容总览 六大设计原则都有哪些 一、单一职责原则 二、里氏替换原则 三、依赖倒置原则 四、接口隔离原则 五、迪米特法则 六、开放封闭原则 内容详解 一、单一职责原则 单一职责原则:英文名称是Single...接口隔离原则是对接口进行规范约束,其包含以下4层含义: 接口要尽量小; — 这是接口隔离原则的核心定义,不出现臃肿的接口(Fat Interface),但是“小”是有限度的,首先就是不能违反单一职责原则...那才是完全解耦,在实际的项目中,需要适度地考虑这个原则,别为了套用原则而做项目。...原则只是供参考,如果违背了这个原则,项目也未必会失败,这就需要大家在采用原则时反复度量,不遵循是不对的,严格执行就是“过犹不及”。...其次,开闭原则是最基础的一个原则,前面介绍的原则都是开闭原则的具体形态,也就是说前五个原则就是指导设计的工具和方法,而开闭原则才是其精神领袖。
一个学科的原则集合,会随着学科的发展而发展。现存的原则会发生改变,新的原则会被加进来,旧的原则将不再适用。实践和从实践中获得的经验,促使我们发展了那些原则。...这些方法包括:让客户参与(见原则8)、原型设计(在全面开发之前验证需求;见原则11~13)、保持设计简单(见原则67) 、审查代码(见原则98)和雇用最优秀的人(见原则130和131) 。...原则96 先写文档后写代码 一些读者对这个原则或许会感到奇怪,但当实践一段时间之后,你会认为这个原则是理所当然的。第95个原则解释了为什么应该在写完代码前加注释。...原则132 几个好手要强过很多生手 本原则与原则131是一致的。原则131说,你应该总是雇佣最好的工程师。...根据Boehm的说法,它们是: ■人员短缺(见原则131)。 ■不切实际的排期(见原则148) 。 ■不理解需求(见原则40)。 ■开发糟糕的用户界面(见原则42)。
好用的代码,也都会遵循一此原则,这就是设计原则,它们分别是: 单一职责原则 (SRP) 开闭原则 (OCP) 里氏替换原则 (LSP) 接口隔离原则 (ISP) 依赖倒置原则 (DIP) 提取这五种原则的首字母缩写词...,就是 SOLID 原则。...下面分别进行介绍,并展示如何在 Python 中应用。...1、单一职责原则 SRP 单一职责原则(Single Responsibility Principle)这个原则的英文描述是这样的:A class or module should have a single...3、里氏替换原则 (LSP) 里式替换原则的英文是 Liskov Substitution Principle,缩写为 LSP。
什么是开闭原则? 在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即应当可以在不必修改源代码的情况下改变这个模块的行为。 如何运用开闭原则?...开闭原则解决问题的关键在于抽象化,把系统所有可能的行为抽象成一个抽象底层,这个抽象底层规定出所有的具体实现必须提供的方法的特征,给系统定义出一个一劳永逸,不再修改的抽象设计,此设计允许有无穷尽的行为在实现层被实现...遵守开闭原则进行如下改变 打折类: public class OffNovelBook extends NovelBook { public OffNovelBook(String name
Plan:制定目标与计划 Do:任务展开,组织实施 Check:对过程中的关键点和最终结果进行检查 Action:纠正偏差,对成果进行标准化,并确定新的目标,制定下一轮计划 smart 原则 人们在制定工作目标或者任务目标时
StringFormatUtil.stringFormat(MSG)); } } 程序必须首先让人类理解,然后顺便让机器能执行^_^xxxx Process finished with exit code 0 总结 通过上述代码可以知道,开闭原则是是为了避免过多的修改原有的代码逻辑...,用扩展代替修改而衍生的一个原则,不可否认,他也是所有的设计模式都想表达的一个结果,高扩展性。...开闭原则也并不是免费的。有些情况下,代码的扩展性会跟可读性相冲突。比如,我们之前举的 StringFormat格式化的例子。
作者:Mattia Cinelli翻译:朱启轩校对:欧阳锦 本文约3500字,建议阅读15分钟本文通过一些Python示例代码介绍了可以提高代码可靠性的SOLID编码准则。...在下文里,我将探讨这五个原则,并提供一些Python的示例。通常,SOLID原则应用于面向对象的编程情景中(即:Python的类),但我相信无论您的写码水平如何,他们都对您是有效的。...http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod https://codingwithjohan.com/blog/solid-python-introduction...“Clean Code in Python” by Mariano Anaya 原文标题: SOLID Coding in Python 原文链接: https://towardsdatascience.com.../solid-coding-in-python-1281392a6a94 编辑:王菁 校对:汪雨晴 译者简介 朱启轩,康奈尔大学研究生在读,专业领域是应用统计,方向是数据科学。
众所周知,熟悉Python的小伙们接触最多的就是函数,函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。 函数能提高应用的模块性和代码的重复利用率。...除了Python提供了许多内建函数,比如print()。而我们接触最频繁的就是用户自定义函数。 函数定义 函数定义要素: def关键词,后接函数标识符名称和圆括号 ()。...为了使代码更好的复用和最小程度的代码冗余,掌握函数开发的四个原则尤为重要。...案例嘛,就翻翻github,捞一下我几年前刚学python那会写的代码,看看会不会有什么意外收获。 image.png image.png 这个函数实现了自动根据播单id,下载MP3音频的功能。...可以分为三个步骤: 请求播单,得到播单响应 提取播单中MP3地址 下载MP3音频并保存到本地 原则一:函数设计要尽量小,嵌套层次不宜过深。
python中MRO原则的使用 1、MRO原则可以通过.__mro__属性输出相应方法来确定顺序。 2、__mro__属性显示了指定类所没有的继承脉络和继承次序。...__mro__) d=D() d.foo() 以上就是python中MRO原则的使用,希望对大家有所帮助。...更多Python学习指路:python基础教程 本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。
这些操作都是通过「修改」来实现新功能的,不符合「开闭原则」。 如果我们要遵循「开闭原则」,必须对修改关闭,对扩展开放。...其次,「开闭原则」的定义是软件实体(模块、类、方法等)应该对扩展开放,对修改关闭。...实际编码过程中怎么遵守开闭原则? 我的理解是不需要刻意遵守。 你只需要头脑中有这个印象就行了,你需要知道的就是你的代码需要具有一定的扩展性。...所有的设计原则都只有一个最终归宿——不破坏原有代码的正常运行,方便扩展。...还是那句话,设计原则和设计模式不是金科玉律,只要适合当前需求,并具备一定弹性的设计就是好设计。要平衡代码扩展性和可读性,切勿滥用设计原则和设计模式,牺牲代码的可读性。
加法原则 ( 1 ) 加法原则 ( 不能叠加 的事件才能用 加法原则 | 适用于 分类选取 ) ( 2 ) 乘法法则 ( 相互独立 的 事件 才能用 乘法法则 | 适用于 分步选择 ) 2....习题解析 ( 1 ) 习题 1 ( 加法原理 ) ( 2 ) 习题 2 ( 加法原则 乘法原则 综合运用 ) ( 3 ) 习题 3 ( 乘法原则 ) 1....加法原则 ( 1 ) 加法原则 ( 不能叠加 的事件才能用 加法原则 | 适用于 分类选取 ) 加法原则 : 1.加法法则描述 : 事件 A 有 m 种 产生方式 , 事件 B 有 n...种 , 三种方式只能选择一种 , 三者不能重叠 ( 同时存在 ) , 因此使用加法原则 进行计算 ; ③ 结果是 : 15 + 8 + 20 = 43 ; ---- ( 2 ) 习题 2 ( 加法原则...解 : 加法原则 : ① 直接从 A 到 C 与 ② 从 A 先到 B 再到 C 是 不能重叠的 , 方案 ① 与 方案 ② 需要 用家法原则 , 乘法原则 : 方案 ② 内部需要使用
python的设计宗旨是简单、优雅、明确。 但很多开发人员通过自己的努力将其做成了复杂、丑陋、晦涩。...结合Python之禅与自己的开发经验,给出如下一些观点与建议,希望可以为你带来一些帮助: 01 优美胜于丑陋 代码除了完成指定功能,同时也是给人看的。...08 特例不足以特殊到违背这些原则 在代码编写过程中,不可避免会需要对某些特例提供支持,甚至有时为了可以支持特例,需要违背一些已有的好的原则。...09 实用性胜过纯粹 编写代码的首要原则是可用,在可用的基础上才有可能执行其它如性能优化、效率提升等操作。...如对编程语言的选择,对于科学计算和人工智能相关的事情,最直接的选择就是使用Python,这个对于目前来说是最直接的唯一选择。
开放封闭原则 开放封闭原则表示一个软件实体(如类、模块、函数等)应该对扩展开放,对修改封闭。也就是说,一个软件实体应该在不修改原有代码的前提下,可以扩展新的功能。...开放封闭原则是设计模式的核心原则,它体现了软件的灵活性和稳定性。如果一个软件能够满足开放封闭原则,那么它就具有以下两个优点: 能够扩展已有的功能,满足新的需求,具有很强的适应性和灵活性。...{ throw new IllegalArgumentException("Invalid expression"); } } } 这个类违反了开放封闭原则...为了遵循开放封闭原则,我们应该将 Calculator 类设计成一个抽象类,并定义一个抽象方法 calculate()。
里氏替换原则 里氏替换原则表示如果对每一个类型为 S 的对象 o1 都有类型为 T 的对象 o2 ,使得以 T 定义的所有程序 P 在所有的对象 o1 都代换成 o2 时 ,程序 P 的行为没有发生变化...里氏替换原则是继承复用的基础,它体现了子类和父类之间的关系。...如果一个软件能够遵循里氏替换原则,那么它就具有以下两个优点: 保证了父类的抽象性和可复用性,子类可以扩展父类的功能,但不会破坏父类的约束和规范。...这个类就违反了里氏替换原则,因为它改变了父类的行为含义,使得在程序中无法将 Bird 对象替换 Animal 对象,而不改变程序的逻辑。...Animal { @Override public void run() { System.out.println("鸟可以飞行"); } } 为了遵循里氏替换原则
依赖倒置原则 依赖倒置原则表示高层模块不应该依赖低层模块,两者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。也就是说,要针对接口编程,而不是针对实现编程。...依赖倒置原则是面向对象设计的重要原则之一,它体现了面向对象的思想和封装的特性。如果一个软件能够遵循依赖倒置原则,那么它就具有以下两个优点: 降低了类之间的耦合性,提高了系统的稳定性。...keyboard.input(); mouse.click(); System.out.println("电脑工作"); } } 这个类违反了依赖倒置原则...为了遵循依赖倒置原则,我们应该将 Keyboard 类和 Mouse 类设计成实现一个共同的接口 Component。
缺点三:增强了耦合性,当父类的常量、变量和方法被修改时需要考虑子类的修改 里式替换作用 Java的单继承机制从总体上看是利大于弊,那么,如何让利的优势发挥最大,同时减少弊的带来的麻烦呢,于是就有了里式替换原则...,里氏替换原则为良好的继承定义了一个规范 我们在做系统设计时,经常会定义一个接口或抽象类,然后编码实现,调用类则直接传入接口或抽象类,其实这里已经使用了里氏替换原则 举一个CS的案例: 枪的主要职责是射击...注意 在类中调用其他类时务必要使用父类或接口,如果不能使 用父类或接口,则说明类的设计已经违背了LSP原则 本文内容参考设计模式之禅,仅用于个人学习,如有不妥请联系删除
3W原则: 这里3W是线与线之间的距离保持3倍线宽。你说3H也可以。但是这里H指的是线宽度。不是介质厚度。...20H原则: 是指电源层相对地层内缩20H的距离,当然也是为抑制边缘辐射效应。在板的边缘会向外辐射电磁干扰。将电源层内缩,使得电场只在接地层的范围内传导。有效的提高了EMC。...针对EMC PCB设计中的20H原则? "20H规则"的采用是指要确保电源平面的边缘要比0V平面边缘至少缩入相当于两个平面间层距的20倍。...笔面试作答简记: 20H原则是指电源层边缘要比地层边缘至少缩进20倍的层与层间距,以抑制边缘辐射效应; 内缩20H可限制70%的电场,内缩100H可限制98%的电场。
开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统。 定义: 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。...开闭原则的含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有代码来实现变化。...软件实体包括以下几个部分: 项目或软件产品中按照一定的逻辑规则划分的模块 抽象和类 方法 开闭原则是为软件实体的未来事物而制定的对现行开发设计进行约束的一个原则。...开闭原则的重要性: 开闭原则对测试的影响 开闭原则可是保持原有的测试代码仍然能够正常运行,我们只需要对扩展的代码进行测试就可以了。...开闭原则可以提高可维护性 面向对象开发的要求 如何使用开闭原则: 抽象约束 第一,通过接口或者抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法; 第二,参数类型、引用对象尽量使用接口或者抽象类
如何应对这些变化是开闭原则要解决的问题。开闭原则允许软件实体在不更改其代码的情况下变更其行为(变更包括改变和增加)。...插件与中间件 插件与中间件可以说必须遵守开闭原则。软件在发布后使用人员是无法修改源代码的,因此源代码设计人员需将能力开放给使用人员,就必须依赖开闭原则。...有关这方面,有人提出了 SPI 的概念,可参加以前写的API 与 SPI 与设计模式之间的关系 设计原则是设计模式的指导,设计模式是设计原则的具象。比较虚的原则需要使用比较实的模式来说明。...很多文章使用策略模式来讲解开闭原则,导致很多人认为开闭原则就是策略模式,实际上策略模式是开闭原则的一种实现而已。...按照开闭原则,应该尽量做到修改封闭。
领取专属 10元无门槛券
手把手带您无忧上云