python 实现装饰器设计模式
时间:2022-07-28
本文章向大家介绍python 实现装饰器设计模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
python 装饰器简单、基本的实现并不复杂。装饰器(Decorators)模式类似于继承,当你需要为某一个对象添加额外的动作、行为时,在不改变类的情况下可以使用装饰器。这篇文就当做一篇水文,本来不想写,因为这个专栏是设计模式的多语言基本实现,不涉及过多内容,为了保证内容完整,所以只能直接塞进来了。
首先我们先新建一个人的基类,并且赋予几个属性(名字、性别、头发、衣服等),并且由两个基类,男人和女人:
class People():
name = ""
sex=""
clothes = "没穿"
hair="光头"
sound_color=""
class Man(People):
def __init__(self,name):
self.name=name
self.sex="男"
class Woman(People):
def __init__(self,name):
self.name=name
self.sex="女"
由于类以及新建,不进行改变,使用装饰器进行行为状态添加,是用装饰器。 新建一个装饰器基类,设置好装饰器方法,gethair 与 getclothes,再写两个类 hairDecorator与 dressedDecorator 继承于 exteriorDecorator,在装饰器 hairDecorator 中使对象长出头发,原有对象中头发的属性值是关头,在 dressedDecorator 中使对象穿上衣服,原有属性为没穿衣服。装饰器类如下:
class exteriorDecorator():#外形装饰基
def gethair(self):
pass
def getclothes(self):
pass
class hairDecorator(exteriorDecorator):#头发装饰
def __init__(self,people):
self.people=people
self.sex="男"
def gethair(self):
return str(self.people.name)+" 长出头发"
class dressedDecorator(exteriorDecorator):#外衣装饰
def __init__(self,people):
self.people=people
self.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=name
self.sex="男"
class Woman(People):
def __init__(self,name):
self.name=name
self.sex="女"
class exteriorDecorator():#外形装饰基
def gethair(self):
pass
def getclothes(self):
pass
class hairDecorator(exteriorDecorator):#头发装饰
def __init__(self,people):
self.people=people
self.sex="男"
def gethair(self):
return str(self.people.name)+" 长出头发"
class dressedDecorator(exteriorDecorator):#外衣装饰
def __init__(self,people):
self.people=people
self.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())
- .NET中的异步编程上
- 从python2到python3
- 【干货】如何写代码 -编程内功心法
- .NET中的异步编程下
- 深度学习数学基础一--最小二乘法
- 【LeetCode 344】关关的刷题日记26 Reverse String
- 基于AOE网的关键路径的求解
- 【LeetCode 122】关关刷题日记25-Best Time to Buy and Sell Stock II
- 【干货】python正则表达式应用笔记
- .NET跨平台之旅:将示例站点从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0
- .NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点
- 【干货】基于pytorch的CNN、LSTM神经网络模型调参小结
- jenkins配置.net mvc网站
- 简述【聚类算法】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 容器服务 TKE 上服务暴露的几种方式
- 【论文分享】ACL 2020 信息抽取任务中的新动向
- 工匠人iOS 代码规范
- 写一个通用的幂等组件,我觉得很有必要
- PC性能监测工具,您不可或缺的好帮手~~
- 特征工程之处理时间序列数据
- Matplotlib中的“plt”和“ax”到底是什么?
- 使用深度学习模型创作动漫故事,比较LSTM和GPT2的文本生成方法
- 聊聊BitCaskLock
- LightGBM的参数详解以及如何调优
- 聊聊BitCaskKeyDir
- 使用2D卷积技术进行时间序列预测
- 在PyTorch中使用DistributedDataParallel进行多GPU分布式模型训练
- 同城双活与异地多活架构分析
- leetcode多线程之按序打印