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和str比较
Sep 20 Python
python实现堆栈与队列的方法
Jan 15 Python
Sublime开发python程序的示例代码
Jan 24 Python
python中reader的next用法
Jul 24 Python
python实现多人聊天室
Mar 31 Python
详解PyTorch手写数字识别(MNIST数据集)
Aug 16 Python
python爬虫爬取幽默笑话网站
Oct 24 Python
python实现大战外星人小游戏实例代码
Dec 26 Python
Python ORM编程基础示例
Feb 02 Python
python实现斗地主分牌洗牌
Jun 22 Python
python3.7添加dlib模块的方法
Jul 01 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
Nov 28 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的array_multisort()使用方法介绍
2012/05/16 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
2013/11/07 PHP
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
PHP中list方法用法示例
2016/12/01 PHP
js option删除代码集合
2008/11/12 Javascript
简单的js分页脚本
2009/05/21 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
python使用minimax算法实现五子棋
2019/07/29 Python
Django项目创建到启动详解(最全最详细)
2019/09/07 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
PyTorch安装与基本使用详解
2020/08/31 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
教育专业个人求职信
2013/12/02 职场文书
乔布斯斯坦福大学演讲稿
2014/05/23 职场文书
企业负责人任命书
2014/06/05 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
黄河绝恋观后感
2015/06/08 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL