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 Matplotlib库入门指南
May 18 Python
视觉直观感受若干常用排序算法
Apr 13 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
Python操作Excel插入删除行的方法
Dec 10 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
Python中关于浮点数的冷知识
Sep 22 Python
Python StringIO如何在内存中读写str
Jan 07 Python
Python绘制动态水球图过程详解
Jun 03 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中使用DOM类读取XML文件的实现代码
2011/12/14 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
PHP getName()函数讲解
2019/02/03 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
Python datetime包函数简单介绍
2019/08/28 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
电子商务专业学生的学习自我评价
2013/10/27 职场文书
业务主管岗位职责范本
2013/12/25 职场文书
管事部库房保管员岗位职责
2014/02/21 职场文书
工作保证书范文
2014/04/29 职场文书
优秀班组长事迹
2014/05/31 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript