脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - 六个 Python 面向对象设计原则

六个 Python 面向对象设计原则

2024-05-10 15:30手把手PythonAI编程 Python

今天我们要聊聊 Python 中的面向对象设计,就像打造一座精致的房子,好的设计能让我们的代码既美观又实用。

大家好!今天我们要聊聊Python中的面向对象设计,就像打造一座精致的房子,好的设计能让我们的代码既美观又实用。一起来看看这六个基本原则,它们就像是建筑界的黄金法则,让你的Python项目变得更加强大和灵活!

六个 Python 面向对象设计原则

1. 单一职责原则 (Single Responsibility Principle, SRP)

想象一下,一个厨师只做一件事——烹饪。类也一样,让它专注于一项任务。比如,我们有个Cook类,只负责煮饭:

class Cook:
    def cook_rice(self):
        print("Cooking rice...")

这样,如果需要调整烹饪方法,我们就只在一个地方修改。

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

类要对扩展开放,对修改关闭。就像给房子加新房间,别动主体结构。创建一个新的Chef子类来增加新功能,如BakeCake:

class Baker(Cook):
    def bake_cake(self):
        print("Baking cake...")

原Cook类保持不变,只需引入新的烘焙能力。

3. 里氏替换原则 (Liskov Substitution Principle, LSP)

就像替换相似的家具,子类可以替换掉父类而不影响系统。比如,ElectricChef继承Cook:

class ElectricChef(Cook):
    def cook_with_electric_stove(self):
        print("Cooking with electric stove...")

任何期待Cook的地方,都能用ElectricChef。

4. 依赖倒置原则 (Dependency Inversion Principle, DIP)

高层模块不应该依赖于低层模块,两者应该都依赖于抽象。就像设计师不直接与材料打交道,而是用设计图。使用接口或抽象类:

class KitchenDevice:
    def cook(self):
        pass

class RiceCooker(KitchenDevice):
    def cook(self):
        print("Cooking rice...")

device = KitchenDevice()  # 使用抽象接口
rice_cooker = RiceCooker()
device.cook()  # 厨房设备抽象,具体实现留给子类

5. 接口隔离原则 (Interface Segregation Principle, ISP)

不要强迫用户依赖他们不需要的方法。就像定制家具,客户只需要他们想要的功能。定义多个小接口,而不是一个大而全的:

class CookingTools:
    def prepare(self):
        pass

class RicePreparer(CookingTools):
    def soak_rice(self):
        print("Soaking rice...")

# 用户只需要rice_preparer的特定功能
preparer = RicePreparer()
preparer.soak_rice()

6. 鸭子类型原则 (Duck Typing Principle)

看它像鸭子,走起来像鸭子,那它就是鸭子。Python中不需要显式指定类型,只要行为一致就行。比如,处理不同类型的食材:

class Ingredient:
    def prepare(self):
        pass

class Rice(Ingredient):
    def soak(self):
        print("Soaking rice...")

class Cake(Ingredient):
    def bake(self):
        print("Baking cake...")

ingredients = [Rice(), Cake()]
for ingredient in ingredients:
    ingredient.prepare()  # 只需检查行为,不管它是啥

遵循这些原则,你的Python代码将变得清晰、易于维护,就像一个精心设计的建筑一样。现在,去构建你的面向对象Python世界吧!

原文地址:https://mp.weixin.qq.com/s?__biz=MzI1NjA0MTA2NA==&mid=2454481577&idx=1&sn=c21c5b6999cdcdff028904434f0b4433

延伸 · 阅读

精彩推荐
  • PythonPython闭包执行时值的传递方式实例分析

    Python闭包执行时值的传递方式实例分析

    这篇文章主要介绍了Python闭包执行时值的传递方式,结合实例形式分析了Python闭包执行时的传值原理与实现方式,代码中包含了较为详尽的注释便于理解,需要...

    有一种宿命叫无能为力11482021-02-28
  • Python用pip给python安装matplotlib库的详细教程

    用pip给python安装matplotlib库的详细教程

    这篇文章主要介绍了用pip给python安装matplotlib库的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值...

    saltedfish_mountain6072021-09-09
  • Python浅谈pycharm下找不到sqlalchemy的问题

    浅谈pycharm下找不到sqlalchemy的问题

    今天小编就为大家分享一篇浅谈pycharm下找不到sqlalchemy的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Pony小马6762021-04-24
  • Pythonpython操作sqlite的CRUD实例分析

    python操作sqlite的CRUD实例分析

    这篇文章主要介绍了python操作sqlite的CRUD实现方法,涉及Python操作SQLite数据库CURD相关技巧,需要的朋友可以参考下...

    work245882020-06-24
  • PythonPython实现图片拼接的代码

    Python实现图片拼接的代码

    本文通过实例代码给大家介绍了python实现图片拼接的方法,非常不错,具有一定的参考借鉴借鉴价值,需要的朋友参考下吧...

    LemonTree_Summer10602021-03-12
  • PythonPython语言的变量认识及操作方法

    Python语言的变量认识及操作方法

    这篇文章主要介绍了Python语言的变量认识及操作方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...

    Causal10712021-01-14
  • Python使用Python通过oBIX协议访问Niagara数据的示例

    使用Python通过oBIX协议访问Niagara数据的示例

    这篇文章主要介绍了使用Python通过oBIX协议访问Niagara数据的示例,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下...

    IUpdatable4892021-08-08
  • PythonPillow图像颜色处理的具体使用

    Pillow图像颜色处理的具体使用

    Pillow 提供了颜色处理模块 ImageColor,该模块支持不同格式的颜色,可以修改RGB的颜色,具有一定的参考价值,感兴趣的可以了解一下...

    zx8182022-03-07