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生成器的使用方法
Nov 21 Python
Python实现合并字典的方法
Jul 07 Python
Python使用SocketServer模块编写基本服务器程序的教程
Jul 12 Python
Python 字符串换行的多种方式
Sep 06 Python
用Django写天气预报查询网站
Oct 21 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
python通过移动端访问查看电脑界面
Jan 06 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
python实现对变位词的判断方法
Apr 05 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 Python
python标准库ElementTree处理xml
May 20 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
文件上传类
2006/10/09 PHP
PHP 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
从Web查询数据库之PHP与MySQL篇
2009/09/25 PHP
PHP 柱状图实现代码
2009/12/04 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
JavaScript 反科里化 this [译]
2012/09/20 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
JsRender实用入门教程
2014/10/31 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python里 super类的工作原理详解
2019/06/19 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
Python3离线安装Requests模块问题
2019/10/13 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
python3 中时间戳、时间、日期的转换和加减操作
2020/07/14 Python
Python如何给你的程序做性能测试
2020/07/29 Python
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
督导岗位职责
2015/02/04 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
2015年挂职干部工作总结
2015/05/14 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
浅谈MySQL之select优化方案
2021/08/07 MySQL