Python之美 Decorator深入详解(一)
There should be one—--and preferably only one –--obvious way to do it.
----摘自The Zen of Python, by Time Peters
一些往事
在正式进入Decorator话题之前,请允许我讲一个小故事。
在最近的项目开发过程中,一位同事在读我的代码的时候,提出质疑,为什么同样的验证代码要重复出现在服务接口中呢?
如某服务接口是游戏中的玩家想建造建筑:
def build(user, build_name):
if not is_user_valid(user):
redirect("/auth/login/")
return False
#do something here
return create_building(build_name)
在build这个方法中,前3行是用来检测玩家是否已经验证过的,如果是非验证的玩家,就重定向到登陆页面;如果是验证过的玩家,就给他建造他想要的建筑。
他指出这样的3行验证代码(虽然已经很短)将会出现任意一个玩家服务接口中——升级建筑、拆建筑、甚至是频繁的聊天,我说这只是Ctrl+C、Ctrl+V的时间啊,但是那时候我深想,如果现在需求有变动,要在原来的验证失败的情况下,写日志,那原来的3行代码就变成4行:
if not is_user_valid(user):
redirect("/auth/login/")
log_warning(" %s is trying to enter without permission!" %(user["name"]))
return False
更痛苦的是,你要在每个出现if not is_u
相关文档:
转自:
http://hi.baidu.com/feng2211/blog/item/8b86b6d9816a3f2710df9b79.html
和
http://i.19830102.com/archives/164
Python 版本:2.6
下载地址:http://www.python.org/download/releases/2.6.1/
下载msi文件并安装
MySQLdb版本: MySQL-python-1.2.2.win32-py2.6.exe
下载地址:http://home.netimperia.com/ ......
#将一些类型的文件压缩为7z.py
#for folder all file do 7z
import os
import sys
import distutils.file_util
def ImportOkFile():
if(os.path.isfile("D:\\Records\\将一些类型的文件压缩为7z_record.txt")==False):
f=open("D:\\Reco ......
小白和小菜是大学同学,这不快要毕业了,俩人一合计,找个培训班学点东西,武装一下头脑,顺便解决就业问题。
“你们要报哪个班啊?”接待他们的年轻小姐热心地问道。
“你们这里哪个班最好?”小白不假思索地说,“当然是报最好的班啦。”
“我们公司的培训项目都很好”小姐笑 ......
代码+结果,不做解释
当然,对于python没有virtual function一说,估计当作对比一个例子看看吧。
#include <iostream>
using namespace std;
class base
{
public:
virtual void foo() { cout << "base" << endl; }
base() { foo() ;}
};
class derive: public base
{
pub ......