单例模式

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

单例模式实现方式

 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. DOCKER - 容器抓包

    https://help.aliyun.com/knowledge_detail/40564.html?spm=a2c4e.11153940.blogcont272172.10.b09e28a6AOd ...

  2. elasticsearch学习(1)简单查询与聚合

    elastic 被用作全文搜索.结构化搜索.分析以及这三个功能的组合 一个ElasticSearch集群可以包含多个索引, 每个索引包含多个类型 一个类型存储着多个文档 每个文档又有多个属性 索引(名 ...

  3. poj3176-Cow Bowling【dp】

    The cows don't use actual bowling balls when they go bowling. They each take a number (in the range ...

  4. linu学习第一天:基础知识

    1 bc 计算器 2 ibase=2 以二进制输入,输出10进制 3 obase=2 输出二进制 4 enable --查看内部命令 5 #第一天的命令 6 enable --查看内部命令 7 ena ...

  5. Linux之网络ping(unknown host)故障及yum no more mirrors to try

    1.ping外网出现ping:unknown host   字样故障 鉴于网上大多都是提供临时生效的解决办法,这里不再赘述,并提供下永久生效的方案: 永久生效: 1)添加DNS地址和下一跳网关地址至网 ...

  6. Linux下源码安装Peach-2.3.8教程

    在peach文件夹下运行 python peach.py ./samples/HelloWorld.xml 提示先安装4Suite-XML. 根据提示在dependences文件夹下安装,出现两次错误 ...

  7. Asp.NET误人子弟教程:在MVC里面结合JQ实现AJAX

    public class Person { public string Name { get; set; } public string City { get; set; } public strin ...

  8. Python-----基本操作

    Python是一种简单易学,且功能强大的编程语言.它是面向对象的编程语言. 对象的意义: 对象可以通过一个“.” 的方式来调用这个对象的方法. Python环境安装配置: Python是一种通用的计算 ...

  9. [bzoj3192][JLOI2013]删除物品_树状数组_栈

    删除物品 bzoj-3192 JLOI-2013 题目大意:给你n个物品,分成2堆.所有的物品有不同的优先级.我只可以将一堆中的堆顶移动到另一个堆的堆顶.而如果当前物品是全局所有物品中优先级最高的,我 ...

  10. SQL SERVER 体系结构图

    http://www.cnblogs.com/woodytu/p/4471386.html