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 第一步 hello world
Sep 25 Python
python连接mysql并提交mysql事务示例
Mar 05 Python
python在控制台输出进度条的方法
Jun 20 Python
详解Python的Django框架中的中间件
Jul 24 Python
python 爬取微信文章
Jan 30 Python
python实现简单多人聊天室
Dec 11 Python
python模块之subprocess模块级方法的使用
Mar 26 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
python实现文字版扫雷
Apr 24 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 Python
python内置进制转换函数的操作
Jun 02 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
php中长文章分页显示实现代码
2012/09/29 PHP
PHP输出缓存ob系列函数详解
2014/03/11 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
php生成RSS订阅的方法
2015/02/13 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
详解Python实现进度条的4种方式
2020/01/15 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
应届生保险求职信
2013/11/11 职场文书
师范生的个人求职信范文
2014/01/04 职场文书
丧事主持词大全
2014/04/02 职场文书
《老山界》教学反思
2014/04/08 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书