单例模式:

  什么是单例模式?

    基于某种方法实例化多次得到实例是同一个

  实现方法:

ip = '1.1.1.1'
port = 3306
# 假装来自配置文件 #方法一:定义类方法进行判断
class Mysql:
__instance = None def __init__(self, ip, port):
self.ip = ip
self.port = port @classmethod
def from_settings(cls):
if not cls.__instance:
cls.__instance = cls(ip, port)
return cls.__instance p1 = Mysql.from_settings()
p2 = Mysql.from_settings()
p3 = Mysql.from_settings()
p4 = Mysql('1.1.3.2',2203)
print(p1 is p2 is p3) # Ture
print(p1)
print(p4) #方法二:使用装饰器
def single(cls):
_instance = cls(ip, port) def inner(*args, **kwargs):
if len(args) + len(kwargs) == 0:
return _instance
return cls(*args, **kwargs)
return inner @single
class Mysql:
__instance = None def __init__(self, ip, port):
self.ip = ip
self.port = port p1 = Mysql()
p2 = Mysql()
p3 = Mysql()
p4 = Mysql('1.1.3.2',2203)
print(p1 is p2 is p3) # True
print(p1)
print(p4) 方法三:使用元类控制
class Mymeta(type):
def __init__(self,class_name,class_bases,class_dic):
super().__init__(class_name,class_bases,class_dic)
self.__instance = self.__new__(self)
self.__init__(self.__instance,ip,port) def __call__(self, *args, **kwargs):
if len(args) + len(kwargs) == 0:
return self.__instance
obj = self.__new__(self)
self.__init__(obj,*args,**kwargs)
return obj class Mysql(object,metaclass=Mymeta):
__instance = None def __init__(self, ip, port):
self.ip = ip
self.port = port p1 = Mysql()
p2 = Mysql()
p3 = Mysql()
p4 = Mysql('1.1.3.2',2203)
print(p1 is p2 is p3) # True
print(p1)
print(p4)
 

python基础之单例模式的更多相关文章

  1. python基础(14)-反射&类的内置函数

    反射 几个反射相关的函数可参考python基础(10)-匿名函数&内置函数中2.2.4反射相关 类的一些内置函数 __str__()&__repr__() 重写__str__()函数类 ...

  2. 面试题-python基础

    一.Python基础 1.什么是python?使用python有什么好处? python是一种编程语言,它有对象.模块.线程.异常处理和自动内存管理.它简洁,简单.方便.容易扩展.有许多自带的数据结果 ...

  3. 一、python基础相关知识体系

    python基础 a. Python(解释型语言.弱类型语言)和其他语言的区别? 一.编译型语言:一次性,将全部的程序编译成二进制文件,然后在运行.(c,c++ ,go) 运行速度快.开发效率低 二. ...

  4. python基础知识的学习和理解

    参考链接:https://github.com/yanhualei/about_python/tree/master/python_learning/python_base   python基础知识笔 ...

  5. python基础面试题(全网最全!)

    目录 1.为什么学习Python? 2.通过什么途径学习的Python? 3.Python和Java.PHP.C.C#.C++等其他语言的对比? 4.简述解释型和编译型编程语言? 5.Python解释 ...

  6. python基础全部知识点整理,超级全(20万字+)

    目录 Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https:// ...

  7. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  8. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  9. Python小白的发展之路之Python基础(一)

    Python基础部分1: 1.Python简介 2.Python 2 or 3,两者的主要区别 3.Python解释器 4.安装Python 5.第一个Python程序 Hello World 6.P ...

随机推荐

  1. JQGrid 导出Excel 获取筛选条件

    需求描述:页面加载后,进行相关数据搜索,要求点击导出按钮后  下载Excel文件. 思路:希望在点击[导出Excel]按钮时,获取到表格搜索时的filters内容. 在百度.api.jqgrid.js ...

  2. cookie、session、localstorage

    最早的Cookies问题主要就是太小,大概也就4KB的样子,而且IE6只支持每个域名20个cookies,太少了.优势就是大家都支持,而且支持得还蛮好.cookie的内容主要包括:名字,值,过期时间, ...

  3. springcloud基于ribbon的canary路由方案

    思路 根据eureka的metadata进行自定义元数据,然后使用ribbon对该元数据进行过滤和匹配,选择server. 实现 这里使用header来传递路由信息,改造ribbon-discover ...

  4. TensorFlow两种方式计算Cross Entropy

    sparse_softmax_cross_entropy_with_logits与softmax_cross_entropy_with_logits import tensorflow as tf y ...

  5. Android控件——ToggleButton多状态按钮(实现灯泡的开关)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxoAAAFxCAIAAAB7jkm1AAAgAElEQVR4nOy9eXgUVb7/Dy7j3BnH8T

  6. Laravel 5.2 四、.env 文件与模型操作

    一..env文件 .env 文件是应用的环境配置文件,在配置应用参数.数据库连接.缓存处理时都会使用这个文件. // 应用相关参数 APP_ENV=local APP_DEBUG=true //应用调 ...

  7. 部署HBase系统(分布式部署)

    1.简介 HBase系统主要依赖于zookeeper和hdfs系统,所以部署HBase需要先去部署zookeeper和hadoop 2.部署开始 IP或者HOSTNAME需要根据自身主机信息设定. 部 ...

  8. SPOJ Two Paths

    Description 给定一个无向图,含有一定的路.从中找出两个最长的路径(每条路径有一些相通路组成)这两个路径不能经过公共的点,求何时二路径的乘积最大. 本题给出的无向图是一棵树,每边权值为1. ...

  9. ZOJ-3430

    Detect the Virus  Time Limit: 2 Seconds      Memory Limit: 65536 KB One day, Nobita found that his c ...

  10. hdu 1505(最大子矩阵)

    City Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...