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多重继承实例
Oct 11 Python
Windows8下安装Python的BeautifulSoup
Jan 22 Python
python批量生成本地ip地址的方法
Mar 23 Python
Python调用微信公众平台接口操作示例
Jul 08 Python
python+selenium识别验证码并登录的示例代码
Dec 21 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
解决torch.autograd.backward中的参数问题
Jan 07 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
Keras 使用 Lambda层详解
Jun 10 Python
python如何实现word批量转HTML
Sep 30 Python
使用python如何删除同一文件夹下相似的图片
May 07 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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
php根据年月获取季度的方法
2014/03/31 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
jquery阻止冒泡事件使用模拟事件
2013/09/06 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
在Python下尝试多线程编程
2015/04/28 Python
python中format()函数的简单使用教程
2018/03/14 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
财务方面个人工作的自我评价
2013/12/28 职场文书
探亲邀请信范文
2014/01/30 职场文书
20年同学聚会感言
2014/02/03 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
公司市场部岗位职责
2015/04/15 职场文书
HTML中的表格元素介绍
2022/02/28 HTML / CSS
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js