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

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 实现 装饰模式1.py`、`python 实现 装饰模式2.py`和`python 实现 装饰模式3.py`很可能包含了更多的装饰模式示例,可能涉及到更复杂的功能组合、装饰器链以及装饰器与类装饰器的差异等...

    python设计模式及源码

    Python设计模式是面向对象编程中的一个关键概念,它是一套被广泛接受的解决常见问题的最佳实践。...配合源代码文件,你可以更直观地看到这些模式在Python代码中的实现,加深对设计模式的理解,提升编程技能。

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

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

    python 装饰模式(示例)

    总结来说,Python的装饰模式(即装饰器)是一种强大的工具,它可以优雅地扩展和修改函数或类的行为,而不必改动它们的源代码。这种模式在实际编程中非常实用,尤其是在需要灵活扩展功能而又要保持代码整洁的情况下。...

    精通python设计模式源码

    总之,《精通Python设计模式源码》提供了丰富的实践素材,是Python开发者提升设计能力和代码质量的宝贵资源。通过学习和运用这些设计模式,你不仅可以提高编程技能,还能更好地理解和解决复杂软件系统中的问题。在...

    Python源码剖析(含目录+Small Python源码)

    1. **Python解释器的运行流程**:介绍如何从源代码到字节码,再到机器码的转换过程,包括词法分析、语法解析和编译阶段。 2. **对象系统**:探讨Python中的对象模型,包括对象的创建、生命周期管理、继承和多态性。...

    A Byte of Python3 附源代码

    总之,《A Byte of Python3》是学习Python 3的宝贵资源,它涵盖了从基本语法到高级特性的全面内容,配合源代码的实践,将使你在Python编程之路上走得更远。无论你是编程新手还是经验丰富的开发者,都能从中受益。

    Python常用设计模式源码

    本资源“Python常用设计模式源码”包含了一些在Python编程中常见的设计模式实现。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在Python中,可以使用`__new__`方法或全局变量配合闭包来实现单例。...

    Python-图说设计模式

    例如,书中可能会通过Python代码示例讲解如何实现这些模式,比如使用`__new__`或`__init__`来实现单例模式,或者利用装饰器来动态改变对象功能,体现装饰模式的力量。此外,书中可能会讨论如何在实际项目中选择和...

    python 核心编程 源代码

    《Python核心编程》是Python编程领域的一本经典著作,涵盖了Python语言的基础到高级主题,旨在帮助读者深入理解和掌握...这些源代码是理解Python编程思想和模式的宝贵资源,对于提升编程技能和解决问题的能力大有裨益。

    Python编程实战源码

    在Python中,你可以学习到如工厂模式、单例模式、装饰器模式、观察者模式等。这些模式有助于提高代码的可重用性、可维护性和可扩展性。 2. **并发处理**: Python支持多种并发模型,包括多线程(threading模块)、...

    python 实现 状态模式

    在Python中实现状态模式可以提供一种灵活的方式来处理对象在不同状态下表现出的不同行为,而无需创建大量的条件分支或嵌套if语句。 在Python中,状态模式通常包括以下几个关键组件: 1. **环境类(Context)**:...

    Python-PyPattyrn是一个Python设计模式模板旨在更容易更快地实现你自己项目的设计模式

    通过阅读源代码和文档,开发者可以更好地理解如何在实际项目中应用这些模式。 使用PyPattyrn的优点包括: - **提高代码质量**:设计模式是经过验证的解决方案,遵循它们可以提高代码的可读性和可维护性。 - **易于...

    《Python编程》源代码文件_python_

    书中的源代码文件按照章节进行分类,这为学习者提供了一个逐步实践、逐步理解Python语法和编程概念的绝佳资源。 在Python的世界里,源代码文件通常以`.py`为扩展名,这些文件包含了可执行的Python语句和表达式。...

    python 装饰器(示例)

    Python装饰器是编程语言中的一个强大工具,它允许我们在不修改源代码的情况下,扩展或修改函数、类甚至模块的行为。装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,...

    精通python设计模式

    源代码文件.zip中可能包含了书中各章示例代码,读者可以通过实际运行这些代码来加深理解。动手实践是学习设计模式的关键,通过编写和修改代码,可以更好地领会每种模式的精髓及其在实际项目中的应用。 总之,《精通...

    Python入门经典 源代码 作者James Payne美

    这本书的源代码包含了多个章节,通过这些章节的练习,读者可以逐步掌握Python的核心概念和技术。这些章节的源代码以.zip文件的形式提供,方便下载和学习。 在Python 2.6和3.1这两个主要版本中,虽然语法大体相似,...

    Python基础课程源代码

    "Python基础课程源代码"是一个适合初学者的资源,旨在帮助学习者逐步掌握Python编程的基础知识。通过亲自手敲代码,你可以更好地理解每行代码的作用,加深对编程概念的理解。 在这一系列的课程中,你将会学到以下...

    Python 编程实战 运用设计模式、并发和程序库创建高质量程序+源码

    装饰器模式则允许我们动态地修改或扩展函数和类的行为,而无需改动它们的源代码。 并发处理是现代计算中不可或缺的一部分,特别是在多核处理器和分布式系统中。Python提供了多种并发模型,包括线程(threading模块...

Global site tag (gtag.js) - Google Analytics