单例模式:

  什么是单例模式?

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

  实现方法:

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. 分布式实时日志分析解决方案ELK部署架构

    一.概述 ELK 已经成为目前最流行的集中式日志解决方案,它主要是由Beats.Logstash.Elasticsearch.Kibana等组件组成,来共同完成实时日志的收集,存储,展示等一站式的解决 ...

  2. mysql in/no in/like

    % 任意字符 _ 任意一个字符 in (value,......) 在这里 not in (value,......) 不在这里 mysql> select 'a' not in (1,2,3, ...

  3. Win7(64bit)搭建SVN

    开始: 第一步:下载SVN客户端程序TortoiseSVN并安装(不习惯英文操作界面的顺便在最底下下载一个语言包),下载地址tortoiseSVN下载(由于系统是64位的,我下载的是TortoiseS ...

  4. Unknown character set: 'utf8mb4'

    出现Unknown character set: 'utf8mb4'该错误是因为你的mysql-connector-java版本太高了,现在的mysql编码方式utf8mb4  然而老版本的却是utf ...

  5. tomcat8特性

    作者:Eilen,转载需注明.博客主页:http://www.cnblogs.com/Eilen/ 一.Apache Tomcat 8介绍 Apache Tomcat 8RC1版于前几日发布.它 经过 ...

  6. 解决 :java -version出现错误:“could not open `C:\Program Files\Java\jre7\lib\amd64\jvm.cfg”

    cmd 下java -version出现错误:“could not open `C:\Program Files\Java\jre7\lib\amd64\jvm.cfg”,出现这种错误可能是由于先前有 ...

  7. [ python ] 类的组合

    首先,使用面向对象是一个人狗大战的实例: class Person: def __init__(self, name, hp, aggr, sex): self.name = name self.hp ...

  8. Java Web学习脑图

    Java Web学习脑图,从知乎上摘录,感谢知乎网友的分享.

  9. 讲IOC非常好的一篇文章--初步弄懂DI

    http://jinnianshilongnian.iteye.com/blog/1413846 http://jinnianshilongnian.iteye.com/blog/pdf 之后又看了类 ...

  10. 如何修改wordpress的.po和.mo配置文件

    如果我们在定制个性化WP模版时,若要修改默认语言包中文字描述,则可以通过修改zh_CN.mo和zh_CN.po来实现,但mo文件是不能直接修改编辑,因此就只能修改po文件了,po文件不能通过我们常用的 ...