单例模式的四种实现方式

单例模式:多次实例化的结果指向同一实例

一,单例模式实现方式一

import settings

class MySQL:

    __instance = None

    def __init__(self,ip,sport):

        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.__intance

二,单例模式实现方式二

import settings

def singleton(cls):

    _instance=cls(settings.IP,settings.PORT)

     def wrapper(*args,**kwargs):
            if args and kwargs:
                obj = cls(*args,**kwargs)

                return obj

            return _intance

        return wrapper

@singleton

clas MySQL:

    def __init__(self,ip,port):

        self.ip = ip

        self.port = port

三,单例模式实现方式三

import settings

class 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 and kwargs:

             obj = self..__new__(self)

            self.__init__(obj,*args,**kwargs)

            return obj

        else:

               return self.__instance

class MySQL(metaclass = Mymeta):
    def __init__(self,ip,port):
        self.ip = ip

        self.port = port

四,单例模式实现方式四

这种方式主要导入模块,首先在模块中写下:

import settings

class MySQL:

    print('run.....')

    def __init__(self,ip,port):

        self.ip = ip

        self.port = port

instance = MySQL(settings.IP,settings.PORT)

然后在Py文件中写下:

def fi():

    from singleton import instance

    print(instance)

def f2():

    from singleton import instance,Mysql

    print(instance)

    obj= MySQL("1.1.1.1",3302)

    print(obj)

f1()

f2()

猜你喜欢

转载自blog.csdn.net/qq_42737056/article/details/82149209