Python单例模式实现日志功能

2025-05-21 21:44:00

1、打开python开发工具IDLE,新建‘Sin.py’文件,为方便理解先做一个函数装饰器,代码如下:def decr(fun): def addstr(ar): return 'hello'+fun(ar) return addstr@decrdef innerfun(s): return sprint (innerfun('world'))解释一下:innerfun是传入decr装饰器的函数,可以理解为函数指针fun,其参数传入的是decr内层函数addstr,最后得到的字符串就是addstr函数作用之后的了,在返回给innerfun函数

Python单例模式实现日志功能

2、F5运行程序,打印出‘hello world’

Python单例模式实现日志功能

3、再创建一个‘SinCls.py’文件,编写单例模式装饰器,代码如下:def singlecls(cobj): _instance = {} def createCobj(): if cobj not in _instance: _instance[cobj] = cobj() return _instance[cobj] return createCobj解释一下_instance这个字典使用类的地址作为key,对象实例作为value。类的地址不变,第一次创建类的对象后,就不会再创建新的。

Python单例模式实现日志功能

4、接下来创建一个类,并测试单例模式装饰器,完整代码如下:def singlecls(cobj): _instance = {} def createCobj(): if cobj not in _instance: _instance[cobj] = cobj() return _instance[cobj] return createCobj@singleclsclass myCls(): def __init__(self): passif __name__=='__main__': cl1 = myCls() cl2= myCls() print (id(cl1)) print (id(cl2))

Python单例模式实现日志功能

5、F5运行程序,打印出两个对象实例的地址,地址一致,说明同一实例。

Python单例模式实现日志功能

6、改写例子中的类,使之成为一个日志类,代码如下import loggingdef singlecls(cobj): _inst锾攒揉敫ance = {} def createCobj(): if cobj not in _instance: _instance[cobj] = cobj() return _instance[cobj] return createCobj@singleclsclass myCls(): def __init__(self): self.logger = logging.getLogger()if __name__=='__main__': cl1 = myCls() cl1.logger.warning('first warn')

Python单例模式实现日志功能

7、正常的日志一般写在文件里,IO频繁这也是用单例模式的好处,这里关于日志的知识就不展开了。F5运行程序,警告信息输出到控制台

Python单例模式实现日志功能
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢