单例模式

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

单例模式实现方式

 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. html table内容不随标题滚动

    <html><head></head><body> <div> <div id="demo" style=&quo ...

  2. Java中接口与接口和类之间的关系

    接口和接口之间的关系 继承关系 可以多继承,并且可以多层继承 注意: 1.如果多个父接口中有同名的抽象方法,那么子接口只需要实现一次即可 2.如果多个父接口中有同名的默认方法,那么子接口必须重写默认方 ...

  3. S3C2440时钟体系

    注:以下内容学习于韦东山老师arm裸机第一期视频教程 一. 2440时钟简介 1.1 2440是一个SOC(system on chip)系统,不仅有很多CPU,还有很多外设,在2440芯片手册有系统 ...

  4. 3.Linux的远程管理及网络下载

    3.1 Linux的远程管理 3.1.1 远程管理概述 什么是远程管理: 1.为什么需要远程管理: 服务器通常是Linux系统,而服务器不可能一直在身边,所以就需要远程来操作服务器 企业中通常需要集群 ...

  5. How To : Modify ASM SYS password using asmcmd 11g R2 and upper

    修改RAC 11gR2及以上版本的ASM的SYS的密码方法 [grid]$ asmcmd ASMCMD> orapwusr --modify --password sys Enter passw ...

  6. PHP面试:说下什么是堆和堆排序?

    堆是什么? 堆是基于树抽象数据类型的一种特殊的数据结构,用于许多算法和数据结构中.一个常见的例子就是优先队列,还有排序算法之一的堆排序.这篇文章我们将讨论堆的属性.不同类型的堆以及堆的常见操作.另外我 ...

  7. Silverlight之我见——DataGrid数据验证

    <UserControl x:Class="DataValidationSample.MainPage" xmlns="http://schemas.microso ...

  8. 第十三节:pandas之groupby()分组

    1.Series()对象分组 1.1.单级索引 1.2.多级索引 2.DataFrame()对象分组 3.获取一个分组,遍历分组,filter过滤.

  9. 手动扩栈#pragma comment(linker, "/STACK:1024000000,1024000000")

    #pragma comment(linker, "/STACK:1024000000,1024000000")

  10. linux系统监控:记录用户操作轨迹,谁动过服务器

    1.前言 我们在实际工作当中,都碰到过误操作.误删除.误修改过配置文件等等事件.对于没有堡垒机的公司来说,要在linux系统上深究到底谁做过配置文件的修改.做过误删除是很头疼的事情,特别是遇到删库跑路 ...