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中列表(list)操作方法汇总
Aug 18 Python
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
在Python的Flask框架中使用日期和时间的教程
Apr 21 Python
Python处理字符串之isspace()方法的使用
May 19 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
python+pygame简单画板实现代码实例
Dec 13 Python
python3+PyQt5自定义视图详解
Apr 24 Python
python 处理string到hex脚本的方法
Oct 26 Python
Python 数据可视化pyecharts的使用详解
Jun 26 Python
python获取点击的坐标画图形的方法
Jul 09 Python
Python操作Sqlite正确实现方法解析
Feb 05 Python
基于PyInstaller各参数的含义说明
Mar 04 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
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
PHP 快速排序算法详解
2014/11/10 PHP
Nginx实现反向代理
2017/09/20 Servers
php提供实现反射的方法和实例代码
2019/09/17 PHP
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
详解vue 命名视图
2019/08/14 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
vue.config.js中配置Vue的路径别名的方法
2020/02/11 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
Python的函数的一些高阶特性
2015/04/27 Python
python 中split 和 strip的实例详解
2017/07/12 Python
python队列queue模块详解
2018/04/27 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
python统计字符的个数代码实例
2020/02/07 Python
python实现图片转字符画的完整代码
2021/02/21 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
大二自我鉴定
2014/01/31 职场文书
卫校毕业生个人自我鉴定
2014/04/28 职场文书
法学专业求职信范文
2015/03/19 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书