Python设计模式(十五)【访问者模式】

深入浅出Python中的访问者模式及其应用场景 在面向对象设计中,访问者模式是一种行为设计模式,它主要用于在不改变现有类结构的前提下,为对象的元素结构增加新的操作。简单来说,访问者模式就像是一位“检查员”,它可以对不同类型的元素进行特定的访问和操作。这种模式将数据结构与作用于结构上的操作解耦合,使得操作集合可以独立变化。Visitor(访问者):定义一个接口,用于声明对每一个元素类的操作方法。ConcreteVisitor(具体访问者):实现了 Visitor 接口,为每个元素类提供了具体的访问操作实现。Element(元素):声明接受访问者的。 阅读详情

只要能执着远大的理想,且有不达目的绝不终止的意愿,便能产生惊人的力量。

"""访问者模式"""
class Node(object):
    pass

class A(Node):
    pass

class B(Node):
    pass

class C(A, B):
    pass

class Visitor(object):
    def visit(self, node, *args, **kwargs):
        meth = None
        """python支持多重继承,在解析父类的__init__时,定义解析顺序的是子类的__mro__属性,内容为一个存储要解析类顺序的元组。"""
        """观察到,super的执行路径和类的__mro__列举的类顺序吻合;而__mro__的顺序可以看作是深搜的结果"""
        for cls in node.__class__.__mro__:
            """方法名"""
            meth_name = 'visit_' + cls.__name__


            """getattr()函数是Python自省的核心函数,具体使用大体如下:
             获取对象引用getattr,Getattr用于返回一个对象属性,或者方法

             如果Visitor对象中有属性meth_name则获得方法返回的值,否则赋值None
           """
            meth = getattr(self, meth_name, None)
            if meth:
                break

        if not meth:
            meth = self.generic_visit
        return meth(node, *args, **kwargs)

    def generic_visit(self, node, *args, **kwargs):
        print('通常访问: ' + node.__class__.__name__)

    def visit_B(self, node, *args, **kwargs):
        print('访问_B ' + node.__class__.__name__)

a = A()
b = B()
c = C()
visitor = Visitor()
visitor.visit(a)
visitor.visit(b)
visitor.visit(c)

运行结果如图:

这里写图片描述

设计模式 访问者模式 最简单的访问者模式讲解代码,设计模式可看看博客中简介http://blog.sina.com.cn/s/blog_161d504630102wxis.html 立即下载

相关推荐

Python 如何实现访问者模式

主要介绍了Python 如何实现访问者模式,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

Python 如何实现访问者设计模式?什么是访问者(Visitor)模式?实际案例中有什么作用?

访问者(Visitor)设计模式是一种行为设计模式,用于在不修改被访问对象的前提下定义新的操作。它通过将操作封装到独立的访问者类中,实现了将数据结构与操作解耦的目标。这种模式适用于对复杂对象结构进行操作的场景,特别是当对象结构包含多个类型的对象,并且这些对象类型可能会发生变化。

天河书阁 - VicRestart 529

举例讲解Python设计模式编程中的访问者与观察者模式

主要介绍了Python设计模式编程中的访问者与观察者模式,设计模式的制定有利于团队协作编程代码的协调,需要的朋友可以参考下

Python访问者模式介绍、使用

访问者模式(Visitor Pattern)是一种行为型设计模式,它能够将算法与对象结构分离,使得算法可以独立于对象结构而变化。这个模式的主要思想是,将对象结构和算法分离开来,使得算法可以独立于对象结构而变化。该模式的核心概念是,定义一个访问者对象,它是对某个对象结构中各个元素的操作,这种操作可以改变元素的类或状态。访问者模式的主要功能是,提供一个统一的访问接口,使得访问者能够遍历整个对象结构,对各个元素进行操作。优点:1、访问者模式可以将数据结构与算法分离,增强了代码的可扩展性和可维护性。

captain 808

MobaXterm详细使用教程

当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…

博客 4万+

从零到一:用CubeMX和485模块快速上手多摩川绝对式编码器(附清零操作详解)

本文详细介绍了如何使用STM32CubeMX和485模块快速上手多摩川绝对式编码器,包括硬件连接、STM32配置、协议解析及清零操作。通过具体的代码示例和调试技巧,帮助开发者高效实现编码器数据读取和清零功能,特别适合STM32单片机开发者参考。

weixin_30599769的博客 190

【Python设计模式26】访问者模式

passpass")")pass访问者模式是一种行为型设计模式,通过将数据结构与作用于结构上的操作解耦,使得增加新的操作变得容易。访问者模式适用于对象结构稳定而操作多变、需要对对象结构中的对象进行不同操作以及需要将无关行为分离到不同类中的场景。合理应用访问者模式,可以提高系统的灵活性和可维护性。理解并掌握访问者模式,有助于在实际开发中构建高效、灵活的系统。

weixin_55252589的博客 702

长安车机破解后能干啥?分享我的UNI-K车机安装第三方应用与优化体验实录

本文详细记录了长安UNI-K车机破解后的实用玩法与深度优化指南,包括安装第三方应用、导航体验升级、影音系统改造及系统美化等。通过工具箱和升级技巧,车主可以大幅提升用车体验,解锁更多隐藏功能。

weixin_33217202的博客 400

Python讲解:访问者模式

访问者模式(Visitor Pattern)是一种行为型设计模式,它允许你在不修改类的情况下为一组对象添加新的操作。通过将算法与对象结构分离,访问者模式使得可以独立地改变这些算法。这种模式特别适用于具有稳定的数据结构但需要频繁变化的操作场景。假设我们正在开发一个简单的图形编辑器应用程序,其中支持多种图形元素(如圆形、矩形)。为了实现对这些图形元素的不同操作(如绘制、保存),我们可以利用访问者模式来实现这一点。首先,我们需要定义一个通用的元素接口,所有具体图形元素都将实现这个接口: 步骤二:创建具体元素类 接

软件架构师笔记 825

VirusTotal API密钥获取与Python实战:从注册到自动化威胁分析

在网络安全和自动化运维领域,API(应用程序编程接口)是实现系统间数据交互与功能集成的核心技术。其工作原理是通过预定义的协议和端点,允许程序化访问特定服务的数据与功能。对于安全工程师和威胁分析师而言,API的价值在于能够将手动、重复的安全操作(如文件扫描、情报查询)转化为自动化工作流,从而极大提升威胁检测与响应的效率。一个典型的应用场景是集成第三方威胁情报平台,以实现对可疑文件、URL或哈希值的批量与实时分析。本文聚焦于全球知名的威胁情报服务VirusTotal,详细解析其API密钥的注册流程、安全配置要点

weixin_28707739的博客 418

医药领域知识图谱快速及医药问答项目(项目全过程)

该项目是中科院软件所刘焕勇老师在github上的开源项目,基于知识图谱的医药领域问答项目 Github项目地址:mirrors / liuhuanyong / qasystemonmedicalkg · GitCode 一、项目环境搭建 该部分要十分注意,由于版本升级的问题,一些用法及格式已经不兼容了。 python3.8 下载地址:Python Release Python 3.8.10 | Python.orght...

qq_52062182的博客 9914

设计模式之十五--访问者模式

访问者模式:表示一个作用于某对象结构中各个元素的操作。它是你可以在不改变个元素的类的前提下定义作用于这些元素的新操作。 访问者模式比较适用于数据结构比较固定的系统中,实现数据结构和算法的分离。但是一般来看数据结构都很不固定,所以用的比较少。 from abc import ABCMeta, abstractmethod class Visitor(metaclass=ABCMeta): def __init__(self, name): self.name = name

Michael_D_Sun的博客 213

Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的理论简述和python仿真实现(附源码)

经典论文Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的学习与编程仿真,提供源码

m0_59701926的博客 1235

十五天Python系统学习教程第十天

通过第十天的学习,您将深入掌握: 1️⃣ Python OOP的高级特性与Java的差异 2️⃣ 元编程在框架开发中的应用 3️⃣ ORM核心原理与实现方法 4️⃣ Python设计模式的独特实现方式

分享技术应用、实践场景等,评论区开放技术难题讨论,共同成长进步。 1648

对雷达中相位补偿概念的一些理解

基于多普勒相位补偿的速度扩展方法和DBF测角,两者本质上都是对相位进行补偿。

qq_42235129的博客 4030

Python 爬虫实战:爬取国家统计局公开数据

国家统计局作为权威的宏观经济数据发布机构,汇聚了人口、GDP、就业、产业经济等多维度的核心统计数据,是开展经济研究、政策分析、行业洞察的重要数据支撑。相较于商业数据平台,国家统计局的公开数据具备权威性、全面性和时效性等特点,但部分数据分散在不同栏目且缺乏结构化下载渠道。本文基于 Python 爬虫技术,系统讲解国家统计局公开数据的爬取方法,重点解决静态表格解析、分页数据抓取、数据结构化转换等问题,同时严格遵循政府网站数据使用规范,为科研、教学等场景提供合规的数据获取方案。本文以国家统计局官网(

2503_91057718的博客 1817

Python常用十五个开源库介绍

以上就是Python常用的十五个开源库的介绍,这些库涵盖了数值计算、数据处理、机器学习、Web开发、爬虫、测试、计算机视觉、自然语言处理等多个领域,它们极大地提高了Python开发者的工作效率,助力解决各种复杂的技术问题。

GLB_0627的博客 1177

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

十五天Python系统学习教程总结报告

通过十五天的密集学习,完成了从Java到Python的核心技能迁移,掌握了: ✅ Pythonic编程思维与工程化实践 ✅ Web全栈开发与自动化运维能力 ✅ 并发编程与性能优化方法论

分享技术应用、实践场景等,评论区开放技术难题讨论,共同成长进步。 1449

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

23種你不可不知的python設計模式

創建型模式5種 《python設計模式(一):工廠方法與抽象工廠及應用場景》 《python設計模式(二):建造者模式》 《python設計模式(三):原型模式—快速實例化類的一種途徑》 《python設計模式(四):單例模式及創建型模式總結》 結構型模式7種 《python設計模式(五):適配器模式——各種類接口的合併》 《python設計模式(六):橋接模式》 《python設計模式(七):組合模式》 《python設計模式(八):裝飾模式》 《python設計模式(九):外觀模式》 《python設計

weixin_48452067的博客 145

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

python设计模式有哪几种

下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】

2301_77645573的博客 684

Python高级开发(三十五):设计模式之抽象工厂

本文介绍了抽象工厂设计模式在跨平台UI开发中的应用。该模式通过定义抽象工厂接口(GUIFactory)和产品接口(Button、Checkbox),实现Windows和macOS两套UI组件的创建。具体工厂类(WindowsFactory/MacOSFactory)负责生产对应风格的产品,客户端代码只需依赖抽象接口,无需关注具体实现。Python示例展示了如何通过配置选择工厂实例,实现UI风格切换,同时保持代码的可扩展性和低耦合性。该模式有效解决了多平台兼容性问题,但新增产品类型时需修改所有工厂接口。

专注于网络安全攻防技术与安全运营(SecOps)实践。 947

Python之设计模式

Python之设计模式Python之设计模式Python之设计模式

Major_S的博客 229

python设计模式(十五):责任链模式

将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求;通常这条链条是一个对象包含对另一个对象的引用而形成链条,每个节点有对请求的条件,当不满足条件将传递给下一个节点处理。 示例code: 创建三个不同的对象,每个对象只处理指定范围内的数字,不属于自己的就传递给下一个对象。 class Bases: def __init__(self, obj=...

python之战 502
上一篇: Python设计模式(十四)【策略模式】
下一篇: Python设计模式(十六)【迭代器模式】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值