python小技巧;最简单单例模式写法

二十几种设计模式中,单例模式是最简单最常用的一种。在其他语言里面实现单例模式要写不少代码,但是在 Python 里面,有一种非常简单的单例模式写法。
在这里插入图片描述

为了演示这种简单的写法,我们首先创建一个文件,

DBUtil.py

文件,用来模拟数据库操作类。这个文件里面的代码如下:

class DBUtil:
def __init__(self):
        self.conn = self.connect()

def connect(self):
        print('创建数据库连接')
return 'connect'

def write(self, data):
        print(f'写入数据:{data}')

def read(self):
        print('从数据库中读取数据')
return 123

现在我们创建两个文件:

a.py

b.py

用来模拟在一个工程里面的两个不同地方同时调用数据库操作类并初始化的过程。

a.py

内容如下:

from DBUtil import DBUtil
from b import run

data = run()
db_util = DBUtil()
db_util.write(data)
b.py

的内容如下:

from DBUtil import DBUtil

def run():
    db_util = DBUtil()
    data = db_util.read()
return data

运行效果如下图所示:
在这里插入图片描述

可以看到,

创建数据库连接

被打印了两次,说明

DBUtil

类被实例化了两次。对应到真实的项目中,就是创建了多个到数据库的链接。这样是很浪费资源的。

当然,你可以在

a.py

中初始化

DBUtil

,然后把这个对象作为参数传入

run

函数里面,再

run

函数里面调用这个对象的方法。

read()

但是在实际项目中,往往会出现很多层的调用,如果要把一个对象一层一层传下去,不仅让参数列表显得杂乱,还容易漏掉或者搞错顺序。

所以,使用单例模式就能避免通过参数传递对象,但又不会创建多个数据库连接。

网上关于单例模式的代码有很多。本文将会介绍最简单的一种,利用 Python 的

import

机制。在 Python 里面,一个模块只会被导入1次,如果多次使用

import xxx

导入同一个模块,后面的导入语句会被自动忽略。利用这个机制,我们就能很容易实现单例模式。

修改

DBUtil.py

,在它的最下面加上一行代码:

class DBUtil:
def __init__(self):
        self.conn = self.connect()

def connect(self):
        print('创建数据库连接')
return 'connect'

def write(self, data):
        print(f'写入数据:{data}')

def read(self):
        print('从数据库中读取数据')
return 123

db_util = DBUtil()

修改

a.py
from DBUtil import db_util
from b import run

data = run()
db_util.write(data)

修改

b.py
from DBUtil import db_util

def run():
    data = db_util.read()
return data

运行以后的效果如下图所示:
在这里插入图片描述

可以看到,

创建数据库连接

只打印了1次,说明单例模式成功。

这种单例模式非常简单,但是有一个弊端,就是无法实现懒加载。程序刚刚开始运行,

DBUtil

类就会被实例化,无法做到等到需要的时候才实例化。

以上就是今天的全部内容分享,觉得有用的话欢迎点赞收藏哦!

Python经验分享

学好 Python 不论是用于就业还是做副业赚钱都不错,而且学好Python还能契合未来发展趋势——人工智能、机器学习、深度学习等。
小编是一名Python开发工程师,自己整理了一套最新的Python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。如果你也喜欢编程,想通过学习Python转行、做副业或者提升工作效率,这份【最新全套Python学习资料】 一定对你有用!

小编为对Python感兴趣的小伙伴准备了以下籽料 !

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑培训的!

  • 学习时间相对较短,学习内容更全面更集中
  • 可以找到适合自己的学习方案

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、Python量化交易等学习教程。带你从零基础系统性的学好Python!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


最新全套【Python入门到进阶资料 & 实战源码 &安装工具】(安全链接,放心点击)

我已经上传至CSDN官方,如果需要可以扫描下方官方二维码免费获取【保证100%免费】

*今天的分享就到这里,喜欢且对你有所帮助的话,记得点赞关注哦~下回见 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值