python 单例模式的实现方法_python中单例模式的四种实现方式
配置文件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中单例模式的四种实现方式相关推荐
- python数据预处理的方法_python中常用的九种数据预处理方法
python中常用的九种预处理方法分享 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardizat ...
- tp5类的属性不存在_thinkPHP5.1框架中Request类四种调用方式示例
本文实例讲述了thinkPHP5.1框架中Request类四种调用方式.分享给大家供大家参考,具体如下: 1. 传统调用 访问方式:http://127.0.0.1/demo/demo3/test?n ...
- 【温故知新】——原生js中常用的四种循环方式
一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0 网页输出"欢迎下次光临" 在网页中弹出框输入1 网页输 ...
- php xml 四种,xml中常见的四种解析方式是什么?
xml解析方式有:1.DOM解析方法,可以对xml文档进行修改操作:2.SAX解析方法,解析速度快,占用内存少:3.JDOM解析方法,查找方便:4.DOM4J解析方法,解析XML的速度快. 在XML的 ...
- Android中Activity的四种启动方式
谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开 ...
- python一维数组使用方法_python中向一维数组添加元素的方法
python 怎么将一个数组逆序输出?爱上了你,我才领略思念的滋味,分离的愁苦和妒忌的煎熬,还有那无休止的占有欲. python 怎么将一个数组逆序输出? 知道的告诉我咯.. 工具/材料:电脑.Pyt ...
- python字符串怎么表示_python中字符串的几种表达方式(用什么方式表示字符串)...
原博文 2018-11-21 18:45 − 说明: 今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. pytho ...
- python 财务分析可视化方法_Python数据可视化的四种简易方法
Python数据可视化的四种简易方法 作者:PHPYuan 时间:2018-11-28 03:40:43 摘要: 本文讲述了热图.二维密度图.蜘蛛图.树形图这四种Python数据可视化方法. 数据可视 ...
- python输入4个数字_Python中输入任意四个数,输出他们由大到小排序
Python中输入任意四个数,输出他们由大到小排序 Python中输入任意四个数,输出他们由大到小排序 要方便的那种,谢谢! 第1个回答 2018-11-04 任意输入4个整数,从大到小排列输出.c语 ...
最新文章
- git github 快速入门
- [(IBUF driven by I/O terminal ) is unplaced after IO placer?
- 使用 .NET CORE 创建 项目模板,模板项目,Template
- Python ID 生成(UUID、自增、19位雪花算法ID)
- linux 启动启动服务_更快地启动Linux
- sqlserver isnull函数使用
- Halcon 基本算子释义
- Github上十大C#开源项目排行榜
- 【PS | 学习】毛坯乡间图打造复古美式电影海报图
- sql 查询结果随机排序
- 开根号的笔算算法图解_手工开根号原理及其步骤
- php访问80端口强制跳转443,nginx 80端口重定向到443端口
- 计算机家庭网络共享,教大家家庭局域网如何共享
- Python房贷计算器等额本息
- 介绍一下大型企业数据防泄密产品选型的思路
- 截屏、录屏、截长图快捷键汇总
- 教学计划编制问题(C语言)
- HCNA之华为ensp基本操作总结
- 安卓8.0桌面图标适配
- shell中 的 export命令
热门文章
- android settext 参数,Android TextView.setTextColor()的参数设置方式
- python和lua哪个有前途_(转)LUA与python根本就不具有可比性
- java poi excel 单元格样式_java poi批量导出excel 设置单元格样式
- vue中style的scoped属性的设计方式
- 安卓SDK之YUV-Image
- 设计模式(C++实现)--一句话总结
- 基于matlab/simulink的双电机速度跟踪伺服系统仿真,基于MatlabSimulink的伺服系统仿真pdf.doc...
- 转载:React Fiber架构(浅显易懂)
- 【源码分享】POSCMS功能如何实现短信验证码
- 终端报错xcrun: error: unable to find utility “xcodebuild”, not a developer tool or