首页 > 编程语言 >python实现"对修改封闭, 对扩展开放"

python实现"对修改封闭, 对扩展开放"

时间:2023-08-22 15:47:12浏览次数:59  
标签:Test1 __ python 封闭 扩展 Feature 特性 消息

对修改封闭, 对扩展开放是架构设计的基本原则. 意思是如果程序增加新的功能, 则不应该修改老的代码, 只需要增加新的代码就可以了, 这样可以避免对老功能的破坏, 新增功能如果有问题, 也很容易回退.
python语言如何实现这个设计目标呢?
可以使用我们之前提到的消息机制来实现: python基于消息的编程

  • 关于特性
    我们定义一个特性类, 只要继承自此类, 就会自动生成此特性的对象, 特性就会自动加载进系统, 不用修改已有程序代码. 如下所示:
from Message import *
class Feature: pass
class Test1(Feature):
    def __init__(self):
        sub('Test1', lambda:print('recv msg'))	# 订阅消息
class Test2(Feature):
    def __init__(self):
        pub('Test1')	# 发布消息
def Run():
    '''运行程序'''
    for subclass in Feature.__subclasses__(): subclass()
Run()

系统会自动实例化继承自Feature的类, 这样如果增加新特性, 只需要增加一个继承自Feature的类即可.

  • 消息机制
    如上例所示, 特性Test1和Test2并不直接依赖, 而是共同依赖于特定消息, 每一个特性可以订阅一些消息, 也可以发布消息, 这样只需要保持消息的稳定性和兼容性, 就最大限度的降低了模块间的耦合性.

标签:Test1,__,python,封闭,扩展,Feature,特性,消息
From: https://www.cnblogs.com/huzhongqiang/p/17648495.html

相关文章

  • Selenium+python,切换frame,定位元素出现NoSuchElementException异常
    在某邮箱登录页面切换frame表单,以及定位frame表单中的元素时提示NoSuchElementException。查阅资料后发现某些frame表单或者页面中的元素id是动态更新的,每一次页面刷新后id值都不一样。  我之所以遇到这个问题,就是因为我使用了id进行定位,而当我运行脚本定位元素的时候,id已......
  • Lnton羚通云算力平台OpenCV Python颜色空间转换与抠图教程
    在OpenCVPython中,颜色空间转换和图像抠图是常见的图像处理任务。下面我将为你介绍如何进行颜色空间转换和图像抠图。颜色空间转换:在OpenCVPython中,可以使用 cv2.cvtColor() 函数将图像从一个颜色空间转换为另一个颜色空间。常用的颜色空间转换包括RGB、BGR、灰度(GRAY)、HS......
  • python判断ip所属地区 python 判断ip 网段
    IP地址是互联网中唯一标识一个设备的地址,有时候需要判断一个IP地址所属的地区,这就需要用到IP地址归属查询。本文将介绍Python如何通过IP地址查询所属地区并展示代码。一、IP地址归属查询IP地址归属查询又称IP地址归属地查询、IP地址归属地定位、IP地址查询、IP地址定位等,是通过......
  • CAN通讯-使用Python收发CAN数据保姆级教程(包含完整代码)
    CAN通讯-使用Python收发CAN数据配置环境1.环境配置1.1安装CAN通讯需要的包1.2安装kvaser_drivers以及KvaserCanKing2.使用Python收发数据2.1接发数据代码如下:2.1.1接收数据代码2.1.2发送数据代码2.2验证发送数据2.2.1使用KvaserCanKing接收数据2.2.2......
  • Python的wizard入门
    Wizard可以快速构建应用程序的图形化界面,下图是Wizard的工作区域介绍。第一步:打开AidLearning中的Wizard工具。单击第一个Layout_H容器,选中容器,在右侧属性窗口中将容器高度css_height调整为300px,容器宽度css_width也调整为300px。容器的默认名称为hbox0。第二步:给容器hbox0添......
  • python系列教程213
    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值......
  • VSCode如何为远程安装预设扩展
    背景在使用VSCode进行远程开发时(python开发之远程开发工具选择_CodingInCV的博客-CSDN博客),特别是远程的机器经常变化时(如机器来源于动态分配),每次连接新的远程时,都不得不手动安装一些开发需要的插件,尽管可以将需要的插件添加到workspace中,然后一键安装,不过总归还是不方便。那么有......
  • python @property装饰器实现原理
    @property装饰器可以使一个对象的方法变成属性访问,比较方便,那么它是如何实现的呢?下面是一个自己动手实现的例子:classMyProperty:def__init__(self,fget=None,fset=None):self.fget=fgetself.fset=fsetdef__get__(self,instance,o......
  • python的几种常用用法(掌握)
    Python常用的自动化小脚本,必须收藏!原创 鬼仔 码农鬼仔 2023-08-1918:00 发表于广东前言大家好,我是鬼仔。今天给大家分享几个python常用的自动化小脚本。无论是日常生活,还是工作开发,这几个脚本都常常会用到!1. List转JSON、String转JSON2. 时间格式转换3.......
  • python 多线程
    在python中,I/O密集型任务可以用多线程的方式来实现(threading库);然而,对于计算密集型任务,由于python中全局锁GIL的存在,多线程并不能起到一个加速的作用。所以此时,一般使用多进程的方式实现(multiprocessing库)。多线程threading:一个人有与异性聊天和看剧两件事要做。单线程的她可......