zoukankan      html  css  js  c++  java
  • 单例模式实现方式

    1、什么是单例模式?

                 基于某种方法实例化多次得到的实例是同一个;

    2、为何用单例模式

                当实例化多次得到的对象中存放的属性否一样的情况,应该将多个对象指向同一个内存,即同一个实例

    3、怎么用?

    (1)单例模式实现方式一,定义类的方法,判断是否实例

    # import settings
    # class Mysql:
    # _isinstance= None #没有实例化
    # def __init__(self,ip,port):
    # self .ip= ip
    # self.port=port
    # @classmethod
    # def look(cls):
    # if cls._isinstance is None : #如果没有实例化 ,进行实例化
    # cls ._isinstance =cls(settings.IP,settings .PORT)
    # return cls ._isinstance #下次使用直接调用之前实例化的结果
    # obj= Mysql.look()
    # obj1= Mysql.look()
    # obj2= Mysql.look()
    #
    # print(obj)
    # print(obj1)
    # print(obj2)


    (2)单例模式实现方式二 在类上加装饰器
    # import settings
    # def auth(func):
    # _instance= func(settings.IP,settings.PORT) #从文件中取值给调用者
    # def wrapper(*args,**kwargs ):
    # if len(args)==0 and len(kwargs )==0: #没有传值
    # return _instance #默认从文件中取值给调用者
    # return func(*args,**kwargs)
    # return wrapper
    # @auth #Mysql= auth(Mysql)=wrapper
    # class Mysql:
    # def __init__(self,ip,port):
    # self .ip= ip
    # self.port=port
    # obj= Mysql()
    # obj1= Mysql()
    # obj2= Mysql('10.0.0.10',66)
    # print(obj)
    # print(obj1)
    # print(obj2)

    (3)单例模式实现方式三 在元类中初始化对象属性
    import settings
    class Mymate(type):
    def __init__(self,class_name,class_pases,class_dic): #定义类
    super(Mymate ,self ).__init__(class_name,class_pases,class_dic)
    self.sx = self.__new__(self ) #创建空对象,赋值给类的属性,储存
    self.__init__(self.sx,settings.IP,settings .PORT) #初始化对象的属性
    def __call__(self,*args,**kwargs):
    if len(args)==0 and len(kwargs)==0:
    return self.sx
    obj= self.__new__(self) #创建对象
    self.__init__(obj,*args,**kwargs) #初始化对象属性 传入类的对象obj
    return obj
    class Mysql(object,metaclass=Mymate):
    def __init__(self,id,port):
    self.id=id
    self.port=port

    obj= Mysql()
    obj1= Mysql()
    obj2= Mysql(33,44)
    print(obj.__dict__ )
    print(obj1.__dict__ )
    print(obj2.__dict__ )










  • 相关阅读:
    CodeForces 404C Ivan and Powers of Two
    CodeForces 433C Ryouko's Memory Note-暴力
    if not
    python3的print函数
    交叉熵
    tensorflow一个很好的博客
    关于第几维的问题
    更新软件
    tensorflow训练代码
    tensorflow的一些函数
  • 原文地址:https://www.cnblogs.com/quqinchao/p/9255761.html
Copyright © 2011-2022 走看看