单例模式

多次实例化的结果指向同一个实例

单例模式实现方式

 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()
obj4=MySQL('1.1.1.3',3309)
print(obj1)
print(obj2)
print(obj3)
1 import settings
2
3 #方式二:
4 def singleton(cls):
5 __instance=cls(settings.IP,settings.PORT)
6 def wrapper(*args,**kwargs):
7 if len(args) !=0 or len(kwargs) !=0:
8 obj=cls(*args,**kwagrs)
9 return obj
10 return __instance
11 return wrappers
12
13 @singleton
14 class MySQL:
15 def __init__(self,ip,port)
16 self.ip=ip
17 self.port=port
18
19 obj1=MySQL.from_conf()
20 obj2=MySQL.from_conf()
21 obj3=MySQL.from_conf()
22 obj4=MySQL('1.1.1.3',3309)
23 print(obj1)
24 print(obj2)
25 print(obj3)
26 print(obj4)
 import settings

 #实例三

 class Mymeta(type):
def __init__(self,class_name,class_bases,class_dic):
#self=MySQL这个类
self.__instance=self(settings.IP,settings.OPRT) def __call__(self,*args,**kwargs):
#self=MySQL这个类
if len(args) !=0 or len(kwargs) !=0:
obj=self.__new__(self)
self.__init__(obj,*args,**kwargs)
return obj
else:
return self.__instance class MySQL(metaclass=Mymeta):#Mymeta(...)
def __init__(self,ip,port):
self.ip=ip
self.port=port obj1=MySQL()
obj2=MySQL()
obj3=MySQL()
obj4=MySQL('1.1.1.3',3302)
print(obj1)
print(obj2)
print(obj3)
print(obj4)
 1 #实例四
2
3 def f1():
4 from singleton import intance
5 print(instance)
6
7 def f2():
8 from singleton import instance,MySQL
9 print(instance)
10 obj=MySQL('1.1.1.3',3302)
11 print(obj)
12
13 f1()
14 f2()
15
16 #该方法还需创建一个 singleton.py 的文件,内容如下:
17
18 import settings
19
20 class MySQL:
21 print('run...')
22 def __init__(self,ip,port):
23 self.ip=ip
24 self.port=port
25
26 instance=MySQL(settings.IP,settings.PORT)

Python 30 单例模式的更多相关文章

  1. python 以单例模式封装logging相关api实现日志打印类

    python 以单例模式封装logging相关api实现日志打印类   by:授客QQ:1033553122 测试环境: Python版本:Python 2.7   实现功能: 支持自由配置,如下lo ...

  2. Python 30分钟入门指南

    Python 30分钟入门指南 为什么 OIer 要学 Python? Python 语言特性简洁明了,使用 Python 写测试数据生成器和对拍器,比编写 C++ 事半功倍. Python 学习成本 ...

  3. Python 30分钟快速入门指南

    学习地址 中文版:Python 30分钟入门指南 英文版:Learn X in Y minutes 学习时间 2019/03/10 19:00 - 19:32,多用了2分钟.

  4. python实现单例模式的三种方式及相关知识解释

    python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singlet ...

  5. Python 基于python实现单例模式

    基于python实现单例模式 by:授客 QQ:1033553122   概念 简单说,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个(当然也 ...

  6. python的单例模式:

    python的单例模式:http://funhacks.net/2017/01/17/singleton/ https://www.cnblogs.com/huchong/p/8244279.html ...

  7. 【Python】单例模式Singleton

    前两天一个面试被问到python中单例模式有几种实现方式,只答出了可以用元类实现...然后就想不起来了. 之后翻书,原来这些之前都见过的啊.... 1.手动实现真正创建实例的方法__new__()来实 ...

  8. 浅谈Python设计模式 - 单例模式

    本篇主要介绍一下关于Python的单例模式,即让一个类对象有且只有一个实例化对象. 一.使用__new__方法(基类) 要实现单例模式,即为了让一个类只能实例化一个实例,那么我们可以去想:既然限制创建 ...

  9. python之单例模式、栈、队列和有序字典

    一.单例模式 import time import threading class Singleton(object): lock = threading.RLock() # 定义一把锁 __inst ...

随机推荐

  1. C# 时间对比

    public bool IfTime(string StartTime, string EndTime) { DateTime dt1 = Convert.ToDateTime(StartTime); ...

  2. ES6 数组去重 方法用了filter或者 indexOf Array.from

  3. linux常用命令--ubuntu

    linux 操作系统 一.linux 操作系统概述 二.安装linux系统 三.linux系统环境 ubuntu,默认有6个命令交互通道和一个图形界面交互通道,默认进入到的是图形界面通道 命令交互模式 ...

  4. js里的深度克隆

    ES6 数组克隆 let arr = [1,2,3,4,5]; let arr1 = [...a]; arr1 = ["a","b","c" ...

  5. 基础命令history

    history   记录历史命令 环境变量: HISTSIZE: 命令历史记录的条数: HISTFILE:  命令历史记录的文件,~/.bash_history: HISTFILESIZE: 命令历史 ...

  6. python 函数编写指南

    #函数编写指南:1.给函数指定描述性名称,且只在其中是用小写字母和下划线 2.每个函数都应包含简要的阐述其功能的注释,该注释应紧跟在函数定义后面,且采用文档字符串格式 3.给形参指定默认值时,等号两边 ...

  7. Python - 三大器 迭代器,生层器,装饰器

    目录 Python - 三大器 迭代器,生层器,装饰器 一. 容器 二. 可迭代对象(iterable) 三. 迭代器 四. 生成器 五. 装饰器 1. 定义 六. 闭包 Python - 三大器 迭 ...

  8. Django——4 模板标签 模板的继承与引用

    Django 模板标签 常用标签 模板的继承与引用 模板标签 标签在渲染的过程中提供任意的逻辑 标签语法: 由%}和 {% 来定义的,例如:{%tag%} {%endtag%} 这个定义是刻意模糊的. ...

  9. fzu 2124

    #include<stdio.h> #include<queue> #include<math.h> #include<algorithm> #incl ...

  10. springboot优雅的关闭应用

    使用actuator,通过发送http请求关闭 将应用注册为linux服务,通过service xxx stop关闭 具体这两种方式如何实现,这里就不说了,网上百度一堆,主要讲一下在这两种情况下web ...