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
相关文档:
#将一些类型的文件压缩为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 ......
conn = httplib.HTTPConnection(EPG_IP + ":" + HTTP_PORT)
url = FAV_URL_PARTH +"userid=" + USER_ID + FAV_DIR_MODIFY
param = '''<ps100request id="Favorite.Category.modify">
<categoryid>'''+categoryid+'''</categoryid>
<categoryname>'''+categoryname+'''</ ......
代码+结果,不做解释
当然,对于python没有virtual function一说,估计当作对比一个例子看看吧。
#include <iostream>
using namespace std;
class base
{
public:
virtual void foo() { cout << "base" << endl; }
base() { foo() ;}
};
class derive: public base
{
pub ......