zoukankan      html  css  js  c++  java
  • Python 30 单例模式

    单例模式

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

    单例模式实现方式

     1 import settings
     2 
     3 #方式一:
     4 class MySQL:
     5        __instance=None
     6        def __init__(self,ip,port):
     7              self.ip =ip
     8              self.port=port
     9        @classmethod
    10        def from_conf(cls):
    11              if cls.__instance is None:
    12                   cls.__instance=cls(settings.IP,settings.PORT)
    13              return cls.__instance
    14 obj1=MySQL.from_conf()       
    15 obj2=MySQL.from_conf()
    16 obj3=MySQL.from_conf() 
    17 obj4=MySQL('1.1.1.3',3309)
    18 print(obj1)
    19 print(obj2)
    20 print(obj3)
    1 import settings
    2 
    3 #方式二:
    4 def singleton(cls):
    5       __instance=cls(settings.IP,settings.PORT)
    6       def wrapper(*args,**kwargs):
    7             if len(args) !=0 or len(kwargs) !=0:
    8                  obj=cls(*args,**kwagrs)
    9                   return obj
    10             return __instance
    11       return wrappers
    12 
    13 @singleton
    14 class MySQL:
    15      def __init__(self,ip,port)
    16           self.ip=ip
    17           self.port=port
    18 
    19 obj1=MySQL.from_conf()       
    20 obj2=MySQL.from_conf()
    21 obj3=MySQL.from_conf() 
    22 obj4=MySQL('1.1.1.3',3309)
    23 print(obj1)
    24 print(obj2)
    25 print(obj3)
    26 print(obj4)
     1 import settings
     2 
     3 #实例三
     4 
     5 class Mymeta(type):
     6      def __init__(self,class_name,class_bases,class_dic):
     7             #self=MySQL这个类
     8             self.__instance=self(settings.IP,settings.OPRT)
     9 
    10     def __call__(self,*args,**kwargs):
    11             #self=MySQL这个类
    12             if len(args) !=0 or len(kwargs) !=0:
    13                  obj=self.__new__(self)
    14                  self.__init__(obj,*args,**kwargs) 
    15                  return obj
    16            else:
    17                return self.__instance
    18 
    19 class MySQL(metaclass=Mymeta):#Mymeta(...)
    20     def __init__(self,ip,port):
    21           self.ip=ip
    22           self.port=port
    23 
    24 obj1=MySQL()
    25 obj2=MySQL()
    26 obj3=MySQL()
    27 obj4=MySQL('1.1.1.3',3302)
    28 print(obj1)
    29 print(obj2)
    30 print(obj3)
    31 print(obj4)
     1 #实例四
     2 
     3 def f1():
     4       from singleton import intance
     5       print(instance)
     6 
     7 def f2():
     8       from singleton import instance,MySQL
     9       print(instance)
    10       obj=MySQL('1.1.1.3',3302)
    11       print(obj)
    12 
    13 f1()
    14 f2()
    15 
    16 #该方法还需创建一个 singleton.py 的文件,内容如下:
    17 
    18 import settings
    19 
    20 class MySQL:
    21      print('run...')
    22      def __init__(self,ip,port):
    23            self.ip=ip
    24            self.port=port
    25 
    26 instance=MySQL(settings.IP,settings.PORT)
  • 相关阅读:
    python同时继承多个类且方法相同
    django扩展用户继承AbstractUser
    python中单下划线和双下划线
    django扩展用户一对一关联
    django拓展用户proxy代理
    django 内置User对象基本使用
    selenium+pthon之二----了解浏览器的相关操作方法
    最近很燥,决心沉下心来学习!
    selenium+pthon之一----环境搭建与脚本实例
    Fiddler入门三
  • 原文地址:https://www.cnblogs.com/zedong/p/9550503.html
Copyright © 2011-2022 走看看