Chinaunix首页 | 论坛 | 博客
  • 博客访问: 316638
  • 博文数量: 89
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 691
  • 用 户 组: 普通用户
  • 注册时间: 2015-09-20 16:58
文章分类

全部博文(89)

文章存档

2017年(1)

2016年(35)

2015年(53)

我的朋友

分类: Python/Ruby

2017-02-16 13:42:14

1, 工厂模式
假设有一个功能, 能使用3种类(class1, class2, class3)实现, 用户使用的时候, 可以根据配置使用其中任何一种,
那么你可以使用工厂模式实现.

classx = get_factory(name):
      if name == "class1":  return class1
      elif name == "class2": return class2
      elif name == "class3": return class3


2,方法覆盖
class test():
    def __init__(test):
        self.test = test

    def __get_attr__(self, attr):
        retrun self.test.__get_attr__(attr)


class test1():
    def display(self):
        print "test1"

class test2():
    def display(self):
        print "test2"
    
   
ts = test(test1)
ts.display()

ts = test(test2)
ts.display()
  


3,装饰器@
可以在一些函数执行前后,  加一段固定的修饰代码, 如lock处理, 参数处理等

def deco(arg):
     def _deco(func):
          def __deco(*args,  **kwargs):
                print "arg", arg
                ret = func(*args, **kwargs)             
                return ret
         return __deco
     return _deco

@deco("test")
def myfunc(*args, **kwargs):
     print "arg:",args,kwargs

myfunc(1,2,3)


3, eval:
eval能把字符串变成本地的变量/函数/类, 使用如下:
import os
def do_cmd(func, *args)
    eval(func)(*args)

do_cmd("os.listdir", "/")


4, traceback

import traceback
import logging

def  test():
    raise Exception({"ENO":123, "EMSG": "test error message"})

try:
    test()
exception Exception, e:
    logging.exception("%s", "test raise")
    traceback.print_exc()
    print e

阅读(1820) | 评论(0) | 转发(0) |
0

上一篇:centos7 部署 svn 及 websvn

下一篇:没有了

给主人留下些什么吧!~~