首页 > 编程 > Python > 正文

python单例模式实例解析

2020-01-04 14:37:47
字体:
来源:转载
供稿:网友

本文实例为大家分享了python单例模式的具体代码,供大家参考,具体内容如下

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

单例模式实现方式

方式一:

import settingsclass 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.__instanceobj1 = MySQL.from_conf()obj2 = MySQL.from_conf()obj3 = MySQL.from_conf()print(obj1)print(obj2)print(obj3)

方式二:

import settingsdef singleton(cls):  _instance = cls(settings.IP, settings.PORT)  def wrapper(*args, **kwargs):    if args or kwargs:      obj = cls(*args, **kwargs)      return obj    return _instance  return wrapper@singletonclass MySQL:  def __init__(self, ip, port):    self.ip = ip    self.port = portobj1 = MySQL()obj2 = MySQL()obj3 = MySQL()print(obj1)print(obj2)print(obj3)

方式三:

import settingsclass Mymeta(type):  def __init__(self, class_name, class_bases, class_dic):    self.__instance = self(settings.IP, settings.PORT)  def __call__(self, *args, **kwargs):    if args or kwargs:      obj = self.__new__(self)      self.__init__(obj, *args, **kwargs)      return obj    else:      return self.__instanceclass MySQL(metaclass=Mymeta):  def __init__(self, ip, port):    self.ip = ip    self.port = portobj1 = MySQL()obj2 = MySQL()obj3 = MySQL()print(obj1)print(obj2)print(obj3)

方式四:

def f1():  from singleton import instance  print(instance)def f2():  from singleton import instance,MySQL  print(instance)  obj = MySQL('1.1.1.1', '3389')  print(obj)f1()f2()singleton.py文件里内容:import settingsclass MySQL:  print('run...')  def __init__(self, ip, port):    self.ip = ip    self.port = portinstance = MySQL(settings.IP, settings.PORT)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到python教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表