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/

Python装饰模式实现源码分享的更多相关文章

  1. 自己写的一个抢票加速的Python小程序源码分享-----纯属娱乐

    最近这段时间频频看到微信群里发什么 抢票加速,智行.携程.飞猪.美团,对于我这能坐客车就不坐火车的人来说,无所谓靠谱不靠谱 突发奇想的整理了下整个抢票加速的逻辑,写了这个小程序,代码很low,拒绝批评 ...

  2. [DeviceOne开发]-土地销售项目源码分享

    一.简介 这个是一个真实项目开源,虽然不是很花哨,但是中规中矩,小细节处理的也很好,非常值得参考和借鉴.里面的数据都缓存到本地,可以离线运行,但是调整一下代码,马上就可以和服务端完全对接.后续会有详细 ...

  3. python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改

    python的paramiko源码修改了一下,写了个操作命令的日志审计,但是记录的日志中也将backspace删除键记录成^H这个了,于是改了一下代码,用字符串的特性. 字符串具有列表的特性 > ...

  4. Python解析器源码加密系列之(二):一次使用标准c的FILE*访问内存块的尝试

    摘要:由于近期打算修改Python解释器以实现pyc文件的加密/解密,出于保密的要求,解密之后的数据只能放在内存中,不能写入到文件中.但是后续的解析pyc文件的代码又只能接受FILE*作为入参,所以就 ...

  5. WP8.1&Win10幸运大转盘源码分享

    先AD一下我的群:Win10开发者群:53078485 最近在写一个APP,其中需要一个转盘动画的源码,找了很多但是都没有找到,无奈只好自己来写,写完效果自己还是比较满意的,分享出来,有需要的童鞋可以 ...

  6. 3D语音天气球(源码分享)——完结篇

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 由于这篇文章是本系列最后一篇,有必要进行简单的回顾和思路整理. 这个程序是由两 ...

  7. 3D语音天气球(源码分享)——在Unity中使用Android语音服务

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...

  8. 3D语音天气球(源码分享)——通过天气服务动态创建3D球

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...

  9. 3D语音天气球(源码分享)——创建可旋转的3D球

    开篇废话: 在9月份时参加了一个网站的比赛,比赛的题目是需要使用第三方平台提供的服务做出创意的作品. 于是我选择使用语音服务,天气服务,Unity3D,Android来制作一个3D语音天气预报,我给它 ...

随机推荐

  1. DAG模型

    数字三角形: 1.递归计算 int solve(int i,int j) { :max(solve(i+,j),solve(i+,j+))); } 2.记忆化搜索,不用指明计算顺序,并且保证每个状态只 ...

  2. WITH (NOLOCK)

    缺点: 1.会产生脏读 2.只适用与select查询语句 优点: 1.有些文件说,加了WITH (NOLOCK)的SQL查询效率可以增加33%. 2.可以用于inner join 语句 脏读: 一个用 ...

  3. 关于MYSQL group by 分组按时间取最大值的实现方法!

    类如 有一个帖子的回复表,posts( id , tid , subject , message , dateline ) , id 为 自动增长字段, tid为该回复的主题帖子的id(外键关联), ...

  4. log4j.properties详解与例子

    在项目中的classes 中新建立一个log4j.properties文件即可: 在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义.定义步骤就是对Logger.Appender及 ...

  5. CentOS6.6系统源代码安装mysql5.5.28教程(附源码包下载地址)+sysbench的安装

    mysql从5.5版本开始,不再使用./configure编译,而是使用cmake编译器,具体的cmake编译参数可以参考mysql官网文档(※ 非常重要) http://dev.mysql.com/ ...

  6. ZOJ 1015 Fishing Net(判断弦图)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=15 题意:给定一个图.判断是不是弦图? 思路:(1)神马是弦图?对于一 ...

  7. JAVA 实战练习

    1.判断变量是否为奇数偶数. package com.JAVA; import java.util.Scanner; public class text { public static void ma ...

  8. pch和info.plist初探

    整理下之前的关于pch和info.plist文件,一下文件部分内容是从传智博客的课件里截取        

  9. 【Unity3D游戏开发】基础知识之Tags和Layers (三二)[转]

    Tags和Layers分别表示是Unity引擎里面的标签和层,他们都是用来对GameObject进行标识的属性,Tags常用于单个GameObject,Layers常用于一组的GameObject.添 ...

  10. Java_类文件及加载机制

    类文件及类加载机制 标签(空格分隔): Java 本篇博客的重点是分析JVM是如何进行类的加载的,但同时我们会捎带着说一下Class类文件结构,以便对类加载机制有更深的理解. 类文件结构 平台无关性 ...