`
小麦麦子
  • 浏览: 29291 次
文章分类
社区版块
存档分类
最新评论

Python装饰模式实现源码分享

 
阅读更多

1.一般来说,通过继承可以获得父类的属性,还可以通过重载修改其方法。

 

2.装饰模式可以不以继承的方式而动态地修改类的方法。

 

3.装饰模式可以不以继承的方式而返回一个被修改的类。

 

4.基本实现

 

程序演示如下:

 

例一:

13_eg1.py

class BeDeco:

    def be_edit_fun(self):

        print('Source fun.')

 

    def be_keep_fun(self):

        print('Keep fun.')

 

class Decorater:

    def __init__(self,dec):

        self._dec = dec()

 

    def be_edit_fun(self):

        print('Start...')

        self._dec.be_edit_fun()

 

    def be_keep_fun(self):

        self._dec.be_keep_fun()

 

if __name__ == '__main__':

    bd = BeDeco()

    bd.be_edit_fun()

    bd.be_keep_fun()

 

    dr = Decorater(BeDeco)

    dr.be_edit_fun()

    dr.be_keep_fun()

 

程序的运行结果为:

 

 

 

例二:

 

13_eg2.py

class Water:

    def __init__(self):

        self.name = 'Water'

 

    def show(self):

        print(self.name)

 

class Deco:

    def show(self):

        print(self.name)

 

class Sugar(Deco):

    def __init__(self,water):

        self.name = 'Sugar'

        self.water = water

 

    def show(self):

        print(self.name)

        print(self.water.name)

 

class Salt(Deco):

    def __init__(self,water):

        self.name = 'Salt'

        self.water = water

 

    def show(self):

        print(self.name)

        print(self.water.name)

 

if __name__ == '__main__':

    w  = Water()

    s = Sugar(w)

    s.show()

 

    s = Salt(w)

    s.show()

 

程序的运行结果为:

 

 

 

5.类装饰器

 

程序演示如下:

13_eg3.py

def deco(a_class):

    class NewClass:

        def __init__(self,age,color):

            self.wrapped = a_class(age)

            self.color = color

        def display(self):

            print(self.color)

            print(self.wrapped.age)

    return NewClass

 

@deco

class Cat:

    def __init__(self,age):

        self.age = age

 

    def display(self):

        print(self.age)

 

if __name__ == '__main__':

    c = Cat(12,'black')

    c. display()

 

程序的运行结果为:

 

 

 

 

 

原文链接:http://www.maiziedu.com/wiki/python/decorative/

<!--EndFragment-->

  • 大小: 38 KB
  • 大小: 10.5 KB
  • 大小: 12.1 KB
分享到:
评论

相关推荐

    python 实现 设计模式

    python 实现 建造者模式 python 实现 状态模式1 python 实现 状态模式2(面向过程的方式-方法版) python 实现 状态模式3(分类版) python 实现 状态模式4 ...python 实现 装饰模式 python 实现 组合模式

    python 实现 装饰模式

    python 实现 装饰模式

    23种Python设计模式示例演示源码包.rar

    23种Python设计模式示例演示源码包,比如包括了工厂模式、Bridge桥接模式、Builder构建模式、Facade外观模式、Adapter适配器模式,Composite组合模式、Decorator装饰器模式,FactoryMethod工厂方法模式、Flyweight享...

    python实现常用的23种设计模式:含源代码、详细文档说明

    4、装饰模式【Decorator】 5、桥接模式【Bridge】 6、组合模式【Composite】 7、享元模式【Flyweight】 三、行为型模式 1、模板方法模式【Template Method】 2、观察者模式【Observer】 3、状态模式【State】 4、...

    详解Python装饰器

    不能修改被装饰函数的源代码 b. 不能修改被装饰的函数的调用方式 3. 实现装饰器知识储备 a. 函数就是变量 b. 高阶函数  i. 把一个函数当作实参传给另外一个函数,在不修改被装饰函数源代码情况下为其添加功能  ii....

    Python开发+Django+资产管理系统+教学研究源码

    源码中包含了大量的Python编程技巧和最佳实践,如装饰器、元类、上下文管理器等。 掌握Web开发技术:Django作为一个Web应用框架,其源码中包含了Web开发所需的各种技术,如HTTP协议处理、模板渲染、数据库操作等。...

    10.Python实战操作源码Web开发.zip

    14如何实现Bearer模式的Token验证.15使用celery异步发送验证邮件.16 如何进行项目日志的配置. 17利用Channels实现Web Socket聊天室.18自定义django-admin命令 19 如何实现message消息提示.20使用Paginator实现数据...

    Python纯源码模拟用户登录验证查询信息实现过程

    通过装饰器模式实现 用户登录 用户验证 用户登出操作

    python cookbook(第3版)

    9.24 解析与分析Python源码 9.25 拆解Python字节码 第十章:模块与包 10.1 构建一个模块的层级包 10.2 控制模块被全部导入的内容 10.3 使用相对路径名导入包中子模块 10.4 将模块分割成多个文件 10.5 利用...

    详解Python中的装饰器、闭包和functools的教程

    装饰器是这样一种设计模式:如果一个类希望添加其他类的一些功能,而不希望通过继承或是直接修改源代码实现,那么可以使用装饰器模式。简单来说Python中的装饰器就是指某些函数或其他可调用对象,以函数或类作为可选...

    Python核心编程第二版

    很不错的python书 第1部分 Python核心  第1章 欢迎来到Python世界   1.1 什么是Python   1.2 起源   1.3 特点   1.3.1 高级   1.3.2 面向对象   1.3.3 可升级   1.3.4 可扩展   1.3.5 可...

    Python Cookbook

    16.6 使用内建的Tokenizer给Python源码上色 572 16.7 合并和拆解Token 575 16.8 检查字符串是否有平衡的圆括号 577 16.9 在Python中模拟枚举 580 16.10 在创建列表推导时引用它自身 583 16.11 自动化py2exe将...

    python入门到高级全栈工程师培训 第3期 附课件代码

    05 源码安装python3.5 06 ssh服务 07 apache服务 08 samba服务 第9章 01 Python开发系列课程概要 02 Python作业要求以及博客 03 编程语言介绍 04 Python种类介绍 05 Python安装以及环境变量的操作 06 Python初识...

    基于Python实现的HTTP请求工具和AES加解密工具源码+使用说明

    使用一个异常处理装饰器,可对不同请求方法进行封装,减少代码。 AES加解密 工具目标 因为有需求,所以才会去做封装以方便工具,在编写poc或exp时会用到aes来加解密,频度比较高的是AES的ECB和CBC两种模式,所以将...

    Python核心编程第二版(ok)

    Python核心编程第二版(ok) 第1部分 Python核心  第1章 欢迎来到Python世界   1.1 什么是Python   1.2 起源   1.3 特点   1.3.1 高级   1.3.2 面向对象   1.3.3 可升级   1.3.4 可扩展   ...

    Python核心编程(第二版).pdf (压缩包分2部分,第二部分)

    原书名: Core Python Programming (2nd Edition) 原出版社: Prentice Hall PTR 作者: (美)Wesley J. Chun 译者: 宋吉广 出版社:人民邮电出版社 ISBN:9787115178503 上架时间:2008-6-23 出版日期:2008 ...

    Python核心编程(第二版).pdf (压缩包分2部分,第一部分)

    原书名: Core Python Programming (2nd Edition) 原出版社: Prentice Hall PTR 作者: (美)Wesley J. Chun 译者: 宋吉广 出版社:人民邮电出版社 ISBN:9787115178503 上架时间:2008-6-23 出版日期:2008 ...

    基于Springboot+Vue的装饰工程管理系统-毕业源码案例设计

    该项目利用了基于springboot + vue + mysql的开发模式框架实现的课设系统,包括了项目的源码资源、sql文件、相关指引文档等等。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料;本资料仅用于学习。 【课程内容】 第1周 开课介绍 python发展介绍 第一个python程序 变量 字符编码与二进制 字符编码的区别与介绍 用户交互程序 if ...

Global site tag (gtag.js) - Google Analytics