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抓取某汽车网数据解析html存入excel示例
Dec 04 Python
Python实现从url中提取域名的几种方法
Sep 26 Python
深入理解Python分布式爬虫原理
Nov 23 Python
简单了解Django模板的使用
Dec 20 Python
python3爬取各类天气信息
Feb 24 Python
Python使用progressbar模块实现的显示进度条功能
May 31 Python
python检测IP地址变化并触发事件
Dec 26 Python
Python批量查询关键词微信指数实例方法
Jun 27 Python
Python 切分数组实例解析
Nov 07 Python
基于pytorch的lstm参数使用详解
Jan 14 Python
django使用JWT保存用户登录信息
Apr 22 Python
python类共享变量操作
Sep 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 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
js实现漫天星星效果
2017/01/19 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
优秀研究生自我鉴定
2013/12/04 职场文书
车间工艺员岗位职责
2013/12/09 职场文书
餐饮业会计岗位职责
2013/12/19 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书
个人年终总结结尾
2015/03/06 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android