python单例模式实例解析


Posted in Python onAugust 28, 2018

本文实例为大家分享了python单例模式的具体代码,供大家参考,具体内容如下

多次实例化的结果指向同一个实例

单例模式实现方式

方式一:

import settings

class MySQL:
  __instance = None

  def __init__(self, ip, port):
    self.ip = ip
    self.port = port

  @classmethod
  def from_conf(cls):
    if cls.__instance is None:
      cls.__instance = cls(settings.IP,settings.PORT)
    return cls.__instance

obj1 = MySQL.from_conf()
obj2 = MySQL.from_conf()
obj3 = MySQL.from_conf()
print(obj1)
print(obj2)
print(obj3)

方式二:

import settings

def singleton(cls):
  _instance = cls(settings.IP, settings.PORT)

  def wrapper(*args, **kwargs):
    if args or kwargs:
      obj = cls(*args, **kwargs)
      return obj
    return _instance

  return wrapper

@singleton
class MySQL:
  def __init__(self, ip, port):
    self.ip = ip
    self.port = port

obj1 = MySQL()
obj2 = MySQL()
obj3 = MySQL()
print(obj1)
print(obj2)
print(obj3)

方式三:

import settings

class Mymeta(type):
  def __init__(self, class_name, class_bases, class_dic):
    self.__instance = self(settings.IP, settings.PORT)

  def __call__(self, *args, **kwargs):
    if args or kwargs:
      obj = self.__new__(self)
      self.__init__(obj, *args, **kwargs)
      return obj
    else:
      return self.__instance

class MySQL(metaclass=Mymeta):
  def __init__(self, ip, port):
    self.ip = ip
    self.port = port

obj1 = MySQL()
obj2 = MySQL()
obj3 = MySQL()
print(obj1)
print(obj2)
print(obj3)

方式四:

def f1():
  from singleton import instance
  print(instance)

def f2():
  from singleton import instance,MySQL
  print(instance)
  obj = MySQL('1.1.1.1', '3389')
  print(obj)

f1()
f2()


singleton.py文件里内容:
import settings

class MySQL:
  print('run...')

  def __init__(self, ip, port):
    self.ip = ip
    self.port = port

instance = MySQL(settings.IP, settings.PORT)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python抓取百度查询结果的方法
Jul 08 Python
Python金融数据可视化汇总
Nov 17 Python
python调用Matplotlib绘制分布点并且添加标签
May 31 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
May 27 Python
如何实现Django Rest framework版本控制
Jul 25 Python
Python3.0 实现决策树算法的流程
Aug 08 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
Python如何把十进制数转换成ip地址
May 25 Python
Win10环境中如何实现python2和python3并存
Jul 20 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
Python 多进程、多线程效率对比
Nov 19 Python
Python音乐爬虫完美绕过反爬
Aug 30 Python
Python3.7实现中控考勤机自动连接
Aug 28 #Python
python实现遍历文件夹修改文件后缀
Aug 28 #Python
Python绘制正余弦函数图像的方法
Aug 28 #Python
Python logging模块用法示例
Aug 28 #Python
Python异常处理操作实例详解
Aug 28 #Python
Python封装原理与实现方法详解
Aug 28 #Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 #Python
You might like
async和DOM Script文件加载比较
2014/07/20 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
Zend Framework上传文件重命名的实现方法
2016/11/25 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
JS中的防抖与节流及作用详解
2019/04/01 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
2019/09/25 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
Python中Django框架利用url来控制登录的方法
2015/07/25 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
python实现远程控制电脑
2019/05/23 Python
Python爬虫 urllib2的使用方法详解
2019/09/23 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
如何基于python实现不邻接植花
2020/05/01 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
护士求职信范文
2014/05/24 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
商务英语专业毕业生求职信
2014/07/06 职场文书
七一活动主持词
2015/06/29 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
七年级英语教学反思
2016/02/15 职场文书
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS