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 实现装饰器设计模式相关推荐

  1. Python之装饰器

    Python之装饰器 在不修改函数调用方式的前提下,也不能修改函数内部源代码!!!! 例如: 在每个季度公司发绩效,统计每个人的代码执行效率.咱们总不能是每个函数里加time模块吧. import t ...

  2. python装饰器函数-Python函数装饰器指南

    Python 具有强大的功能和富有表现力的语法.我最喜欢的装饰之一.在设计模式的上下文中,装饰器动态更改方法或类功能,而不必直接使用子类.当您需要扩展功能,但不想修改原函数时,这是理想的选择.我们可以 ...

  3. python中装饰器的作用_如何理解Python装饰器

    展开全部 理解Python中的装饰器 @makebold @makeitalic def say(): return "Hello" 打印出如2113下的输出: Hello 你会怎 ...

  4. python单例模式原理-请教Python 使用装饰器实现单例模式的原理

    扩展回答 如何理解Python装饰器 简单来讲,可以不严谨地把Python的装饰器看做一个包装函数的函数. 比如,有一个函数: def func(): print "func() run.& ...

  5. 浅谈Django的中间件与Python的装饰器

    浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...

  6. Python的装饰器

    详解Python的装饰器 本文源码 https://github.com/tobyqin/python_decorator Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都 ...

  7. python 日志 装饰器_【Python】装饰器实现日志记录

    好的日志对一个软件的重要性是显而易见的.如果函数的入口都要写一行代码来记录日志,这种方式实在是太低效了,但一直没有找到更好的方法.后来用python写一些软件,了解到python的装饰器功能时,突然人 ...

  8. python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...

  9. python 类装饰器 __set___python装饰器代替set get方法实例

    对于变量的访问和设置,我们可以使用get.set方法,如下: class student: def __init__(self,name): self.__name = name def get_na ...

最新文章

  1. 即学即用的 30 段 Python 非常实用的代码
  2. Exchange Server 2007客户端访问协议部署SSL
  3. solr之schema.xml中文翻译
  4. spring系列-注解驱动原理及源码-声明式事务使用及原理解析
  5. java 闹钟_JAVA可视化闹钟源码
  6. BZOJ1509: [NOI2003]逃学的小孩(树的直径)
  7. 使用MongoDB进行事件流
  8. powershell awk_谈谈 PowerShell
  9. MyBatis的逆向工程工具,自动生成数据库对应的POJO实体类、mapper接口、增删改查mapper.xml文件
  10. 微信“支付”页新增“出行服务” :已上线北深广三城
  11. centos /bin /sbin /usr/bin /usr/sbin 目录的说明
  12. 吴恩达:我的AI商业化方法论
  13. 面向对象18:接口(interface)
  14. clousx6机器人怎么导入词库_clousx6
  15. 42家企业入选中国卓越健康雇主榜;2020高交会聚焦3大亮点与5大趋势 | 美通企业日报...
  16. 如何运用舆情分析系统分析网络舆情数据?
  17. 【教程】小米盒子4 刷机,无广告,总是无限重启,刷入2%报错的解决方法
  18. linux操作系统课程设计总结,计算机操作系统(课程设计)报告.docx
  19. 每日安全文章【1122】
  20. 说说 Pluma 插件管理框架

热门文章

  1. 聊一聊Load Average
  2. Csv解析CsvFile
  3. 2021年了,`IEnumerator`、`IEnumerable`接口还傻傻分不清楚?
  4. 使用Github部署Azure应用服务
  5. ASP.NET Core集成Nacos配置中心之适配多格式配置
  6. 在生产环境下处理EFCore数据库迁移的五种方法
  7. 在ASP.NET Core中编写合格的中间件
  8. 【A】兼容Core3.0后 Natasha 的隔离域与热编译操作。
  9. 在.Net Core中实现一个WebSocket路由
  10. .Net Core小技巧 - Hosted Services + Quartz实现定时任务调度