python 实现装饰器设计模式
python 装饰器简单、基本的实现并不复杂。装饰器(Decorators)模式类似于继承,当你需要为某一个对象添加额外的动作、行为时,在不改变类的情况下可以使用装饰器。这篇文就当做一篇水文,本来不想写,因为这个专栏是设计模式的多语言基本实现,不涉及过多内容,为了保证内容完整,所以只能直接塞进来了。
首先我们先新建一个人的基类,并且赋予几个属性(名字、性别、头发、衣服等),并且由两个基类,男人和女人:
class People():name = ""sex=""clothes = "没穿"hair="光头"sound_color=""class Man(People):def __init__(self,name):self.name=nameself.sex="男"class Woman(People):def __init__(self,name):self.name=nameself.sex="女"
由于类以及新建,不进行改变,使用装饰器进行行为状态添加,是用装饰器。
新建一个装饰器基类,设置好装饰器方法,gethair 与 getclothes,再写两个类 hairDecorator与 dressedDecorator 继承于 exteriorDecorator,在装饰器 hairDecorator 中使对象长出头发,原有对象中头发的属性值是关头,在 dressedDecorator 中使对象穿上衣服,原有属性为没穿衣服。装饰器类如下:
class exteriorDecorator():#外形装饰基def gethair(self):passdef getclothes(self):passclass hairDecorator(exteriorDecorator):#头发装饰def __init__(self,people):self.people=peopleself.sex="男"def gethair(self):return str(self.people.name)+" 长出头发"class dressedDecorator(exteriorDecorator):#外衣装饰def __init__(self,people):self.people=peopleself.sex="男"def getclothes(self):return str(self.people.name)+" 穿上外衣"
以上装饰器在初始化时传入了类对象。接下来新建一个对象小明与装饰器对象:
xiaoming=Man("小明")
xiaomingHariD=hairDecorator(xiaoming)
使用hairDecorator 方法装饰小明的头发,使用 dressedDecorator 装饰小明的上衣:
xiaomingHariD=hairDecorator(xiaoming)
xiaomingdressedD=dressedDecorator(xiaoming)
最后进行输出:
print(xiaomingHariD.gethair())
print(xiaomingdressedD.getclothes())
结果如下:
完整代码如下:
class People():name = ""sex=""clothes = "没穿"hair="光头"sound_color=""class Man(People):def __init__(self,name):self.name=nameself.sex="男"class Woman(People):def __init__(self,name):self.name=nameself.sex="女" class exteriorDecorator():#外形装饰基def gethair(self):passdef getclothes(self):passclass hairDecorator(exteriorDecorator):#头发装饰def __init__(self,people):self.people=peopleself.sex="男"def gethair(self):return str(self.people.name)+" 长出头发"class dressedDecorator(exteriorDecorator):#外衣装饰def __init__(self,people):self.people=peopleself.sex="男"def getclothes(self):return str(self.people.name)+" 穿上外衣"xiaoming=Man("小明")
print(xiaoming.name)
xiaomingHariD=hairDecorator(xiaoming)
xiaomingdressedD=dressedDecorator(xiaoming)
print(xiaomingHariD.gethair())
print(xiaomingdressedD.getclothes())
python 实现装饰器设计模式相关推荐
- Python之装饰器
Python之装饰器 在不修改函数调用方式的前提下,也不能修改函数内部源代码!!!! 例如: 在每个季度公司发绩效,统计每个人的代码执行效率.咱们总不能是每个函数里加time模块吧. import t ...
- python装饰器函数-Python函数装饰器指南
Python 具有强大的功能和富有表现力的语法.我最喜欢的装饰之一.在设计模式的上下文中,装饰器动态更改方法或类功能,而不必直接使用子类.当您需要扩展功能,但不想修改原函数时,这是理想的选择.我们可以 ...
- python中装饰器的作用_如何理解Python装饰器
展开全部 理解Python中的装饰器 @makebold @makeitalic def say(): return "Hello" 打印出如2113下的输出: Hello 你会怎 ...
- python单例模式原理-请教Python 使用装饰器实现单例模式的原理
扩展回答 如何理解Python装饰器 简单来讲,可以不严谨地把Python的装饰器看做一个包装函数的函数. 比如,有一个函数: def func(): print "func() run.& ...
- 浅谈Django的中间件与Python的装饰器
浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...
- Python的装饰器
详解Python的装饰器 本文源码 https://github.com/tobyqin/python_decorator Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都 ...
- python 日志 装饰器_【Python】装饰器实现日志记录
好的日志对一个软件的重要性是显而易见的.如果函数的入口都要写一行代码来记录日志,这种方式实在是太低效了,但一直没有找到更好的方法.后来用python写一些软件,了解到python的装饰器功能时,突然人 ...
- python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景
装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...
- python 类装饰器 __set___python装饰器代替set get方法实例
对于变量的访问和设置,我们可以使用get.set方法,如下: class student: def __init__(self,name): self.__name = name def get_na ...
最新文章
- 即学即用的 30 段 Python 非常实用的代码
- Exchange Server 2007客户端访问协议部署SSL
- solr之schema.xml中文翻译
- spring系列-注解驱动原理及源码-声明式事务使用及原理解析
- java 闹钟_JAVA可视化闹钟源码
- BZOJ1509: [NOI2003]逃学的小孩(树的直径)
- 使用MongoDB进行事件流
- powershell awk_谈谈 PowerShell
- MyBatis的逆向工程工具,自动生成数据库对应的POJO实体类、mapper接口、增删改查mapper.xml文件
- 微信“支付”页新增“出行服务” :已上线北深广三城
- centos /bin /sbin /usr/bin /usr/sbin 目录的说明
- 吴恩达:我的AI商业化方法论
- 面向对象18:接口(interface)
- clousx6机器人怎么导入词库_clousx6
- 42家企业入选中国卓越健康雇主榜;2020高交会聚焦3大亮点与5大趋势 | 美通企业日报...
- 如何运用舆情分析系统分析网络舆情数据?
- 【教程】小米盒子4 刷机,无广告,总是无限重启,刷入2%报错的解决方法
- linux操作系统课程设计总结,计算机操作系统(课程设计)报告.docx
- 每日安全文章【1122】
- 说说 Pluma 插件管理框架
热门文章
- 聊一聊Load Average
- Csv解析CsvFile
- 2021年了,`IEnumerator`、`IEnumerable`接口还傻傻分不清楚?
- 使用Github部署Azure应用服务
- ASP.NET Core集成Nacos配置中心之适配多格式配置
- 在生产环境下处理EFCore数据库迁移的五种方法
- 在ASP.NET Core中编写合格的中间件
- 【A】兼容Core3.0后 Natasha 的隔离域与热编译操作。
- 在.Net Core中实现一个WebSocket路由
- .Net Core小技巧 - Hosted Services + Quartz实现定时任务调度