配置文件settings.py

IP='100.0.0.2'

PORT=3302

方式一:绑定给类的方法

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()

obj = Mysql('1.1.1.0', 3302)

print(obj)

print(obj1)

print(obj2)

print(obj3)

方式二:装饰器

def singleton(cls):

# 先造好一个空对象

instance = cls(settings.IP, settings.PORT)

def wrapper(*args, **kwargs):

if args or kwargs: # args 和 kwargs 有值时,返回obj

obj = cls(*args, **kwargs)

return obj

return instance

return wrapper

@singleton

class Mysql: # Mysql = singleton(Mysql)

def __init__(self, ip, port):

self.ip = ip

self.port = port

obj1 = Mysql() # wrapper()

obj2 = Mysql()

obj3 = Mysql()

obj4 = Mysql('1.1.1.2', 3303)

print(obj1)

print(obj2)

print(obj3)

print(obj4)

方式三:自定义元类

class Mymeta(type):

def __init__(self, class_name, class_base, class_dic):

# 先造好一个空对象

self.instance = self(settings.IP, settings.PORT)

def __call__(self, *args, **kwargs):

if args or kwargs:

# 拿到一个空对象

obj = self.__new__(self)

# 执行__init__方法为对象初始化属性

self.__init__(obj, *args, **kwargs)

# 返回一个实例化好的对象

return obj

return self.instance

class Mysql(metaclass=Mymeta):

def __init__(self, ip, port):

self.ip = ip

self.port = port

obj1 = Mysql() # 调用Mysql就是调用__call__方法

obj2 = Mysql()

obj3 = Mysql()

obj4 = Mysql('1.1.1.4', 3301)

print(obj1)

print(obj2)

print(obj3)

print(obj4)

方式四:利用模块的导入特性

importsettingsclassMysql:def __init__(self, ip, port):

self.ip=ip

self.port=port

instance= Mysql(settings.IP,settings.PORT)

singleton.py

def f1():

from singleton import instance

print(instance)

def f2():

from singleton import instance, Mysql

print(instance)

obj = Mysql('1.1.1.0', 3303)

print(obj)

f1()

f2()

python 单例模式的实现方法_python中单例模式的四种实现方式相关推荐

  1. python数据预处理的方法_python中常用的九种数据预处理方法

    python中常用的九种预处理方法分享 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardizat ...

  2. tp5类的属性不存在_thinkPHP5.1框架中Request类四种调用方式示例

    本文实例讲述了thinkPHP5.1框架中Request类四种调用方式.分享给大家供大家参考,具体如下: 1. 传统调用 访问方式:http://127.0.0.1/demo/demo3/test?n ...

  3. 【温故知新】——原生js中常用的四种循环方式

    一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出"欢迎下次光临" 在网页中弹出框输入1   网页输 ...

  4. php xml 四种,xml中常见的四种解析方式是什么?

    xml解析方式有:1.DOM解析方法,可以对xml文档进行修改操作:2.SAX解析方法,解析速度快,占用内存少:3.JDOM解析方法,查找方便:4.DOM4J解析方法,解析XML的速度快. 在XML的 ...

  5. Android中Activity的四种启动方式

    谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开 ...

  6. python一维数组使用方法_python中向一维数组添加元素的方法

    python 怎么将一个数组逆序输出?爱上了你,我才领略思念的滋味,分离的愁苦和妒忌的煎熬,还有那无休止的占有欲. python 怎么将一个数组逆序输出? 知道的告诉我咯.. 工具/材料:电脑.Pyt ...

  7. python字符串怎么表示_python中字符串的几种表达方式(用什么方式表示字符串)...

    原博文 2018-11-21 18:45 − 说明: 今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. pytho ...

  8. python 财务分析可视化方法_Python数据可视化的四种简易方法

    Python数据可视化的四种简易方法 作者:PHPYuan 时间:2018-11-28 03:40:43 摘要: 本文讲述了热图.二维密度图.蜘蛛图.树形图这四种Python数据可视化方法. 数据可视 ...

  9. python输入4个数字_Python中输入任意四个数,输出他们由大到小排序

    Python中输入任意四个数,输出他们由大到小排序 Python中输入任意四个数,输出他们由大到小排序 要方便的那种,谢谢! 第1个回答 2018-11-04 任意输入4个整数,从大到小排列输出.c语 ...

最新文章

  1. git github 快速入门
  2. [(IBUF driven by I/O terminal ) is unplaced after IO placer?
  3. 使用 .NET CORE 创建 项目模板,模板项目,Template
  4. Python ID 生成(UUID、自增、19位雪花算法ID)
  5. linux 启动启动服务_更快地启动Linux
  6. sqlserver isnull函数使用
  7. Halcon 基本算子释义
  8. Github上十大C#开源项目排行榜
  9. 【PS | 学习】毛坯乡间图打造复古美式电影海报图
  10. sql 查询结果随机排序
  11. 开根号的笔算算法图解_手工开根号原理及其步骤
  12. php访问80端口强制跳转443,nginx 80端口重定向到443端口
  13. 计算机家庭网络共享,教大家家庭局域网如何共享
  14. Python房贷计算器等额本息
  15. 介绍一下大型企业数据防泄密产品选型的思路
  16. 截屏、录屏、截长图快捷键汇总
  17. 教学计划编制问题(C语言)
  18. HCNA之华为ensp基本操作总结
  19. 安卓8.0桌面图标适配
  20. shell中 的 export命令

热门文章

  1. android settext 参数,Android TextView.setTextColor()的参数设置方式
  2. python和lua哪个有前途_(转)LUA与python根本就不具有可比性
  3. java poi excel 单元格样式_java poi批量导出excel 设置单元格样式
  4. vue中style的scoped属性的设计方式
  5. 安卓SDK之YUV-Image
  6. 设计模式(C++实现)--一句话总结
  7. 基于matlab/simulink的双电机速度跟踪伺服系统仿真,基于MatlabSimulink的伺服系统仿真pdf.doc...
  8. 转载:React Fiber架构(浅显易懂)
  9. 【源码分享】POSCMS功能如何实现短信验证码
  10. 终端报错xcrun: error: unable to find utility “xcodebuild”, not a developer tool or