博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 单例模式
阅读量:6149 次
发布时间:2019-06-21

本文共 2115 字,大约阅读时间需要 7 分钟。

单例模式

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

 

单例模式实现方式

方式一:

1 import settings 2  3 class MySQL: 4     __instance = None 5  6     def __init__(self, ip, port): 7         self.ip = ip 8         self.port = port 9 10     @classmethod11     def from_conf(cls):12         if cls.__instance is None:13             cls.__instance = cls(settings.IP,settings.PORT)14         return cls.__instance15 16 obj1 = MySQL.from_conf()17 obj2 = MySQL.from_conf()18 obj3 = MySQL.from_conf()19 print(obj1)20 print(obj2)21 print(obj3)

 

方式二:

1 import settings 2  3 def singleton(cls): 4     _instance = cls(settings.IP, settings.PORT) 5  6     def wrapper(*args, **kwargs): 7         if args or kwargs: 8             obj = cls(*args, **kwargs) 9             return obj10         return _instance11 12     return wrapper13 14 @singleton15 class MySQL:16     def __init__(self, ip, port):17         self.ip = ip18         self.port = port19 20 obj1 = MySQL()21 obj2 = MySQL()22 obj3 = MySQL()23 print(obj1)24 print(obj2)25 print(obj3)

 

 

方式三:

1 import settings 2  3 class Mymeta(type): 4     def __init__(self, class_name, class_bases, class_dic): 5         self.__instance = self(settings.IP, settings.PORT) 6  7     def __call__(self, *args, **kwargs): 8         if args or kwargs: 9             obj = self.__new__(self)10             self.__init__(obj, *args, **kwargs)11             return obj12         else:13             return self.__instance14 15 class MySQL(metaclass=Mymeta):16     def __init__(self, ip, port):17         self.ip = ip18         self.port = port19 20 obj1 = MySQL()21 obj2 = MySQL()22 obj3 = MySQL()23 print(obj1)24 print(obj2)25 print(obj3)

 

 

方式四:

1 def f1(): 2     from singleton import instance 3     print(instance) 4  5 def f2(): 6     from singleton import instance,MySQL 7     print(instance) 8     obj = MySQL('1.1.1.1', '3389') 9     print(obj)10 11 f1()12 f2()13 14 15 singleton.py文件里内容:16 import settings17 18 class MySQL:19     print('run...')20 21     def __init__(self, ip, port):22         self.ip = ip23         self.port = port24 25 instance = MySQL(settings.IP, settings.PORT)

 

转载于:https://www.cnblogs.com/earon/p/9548684.html

你可能感兴趣的文章
类与成员变量,成员方法的测试
查看>>
活在当下
查看>>
每天进步一点----- MediaPlayer
查看>>
PowerDesigner中CDM和PDM如何定义外键关系
查看>>
跨域-学习笔记
查看>>
the assignment of reading paper
查看>>
android apk 逆向中常用工具一览
查看>>
MyEclipse 报错 Errors running builder 'JavaScript Validator' on project......
查看>>
Skip List——跳表,一个高效的索引技术
查看>>
Yii2单元测试初探
查看>>
五、字典
查看>>
前端js之JavaScript
查看>>
Log4J日志配置详解
查看>>
实验7 BindService模拟通信
查看>>
scanf
查看>>
Socket编程注意接收缓冲区大小
查看>>
SpringMVC初写(五)拦截器
查看>>
检测oracle数据库坏块的方法
查看>>
SQL server 安装教程
查看>>
Linux下ftp和ssh详解
查看>>