在settings文件中

IP='1.1.1.1'

PORT=3306

import settings

一:

class 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.__instance

obj1=MySQL.from_conf()

obj2=MySQL.from_conf()

obj3=MySQL.from_conf()

# obj4=MySQL('1.1.1.3',3302)

print(obj1)

print(obj2)

print(obj3)

# print(obj4)

'''

二:

import settings

def singleton(cls):

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

    def wrapper(*args,**kwargs):

        if len(args) !=0 or len(kwargs) !=0:

            obj=cls(*args,**kwargs)

            return obj

        return _instance

    return wrapper

@singleton #MySQL=singleton(MySQL) #MySQL=wrapper

class MySQL:

    def __init__(self, ip, port):

        self.ip = ip

        self.port = port

# obj=MySQL('1.1.1.1',3306) #obj=wrapper('1.1.1.1',3306)

# print(obj.__dict__)

obj1=MySQL() #wrapper()

obj2=MySQL() #wrapper()

obj3=MySQL() #wrapper()

obj4=MySQL('1.1.1.3',3302) #wrapper('1.1.1.3',3302)

print(obj1)

print(obj2)

print(obj3)

print(obj4)

'''

三:

import settings

class Mymeta(type):

    def __init__(self,class_name,class_bases,class_dic):

        #self=MySQL这个类

        self.__instance=self(settings.IP,settings.PORT)

    def __call__(self, *args, **kwargs):

        # self=MySQL这个类

        if len(args) != 0 or len(kwargs) != 0:

            obj=self.__new__(self)

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

            return obj

        else:

            return self.__instance

class MySQL(metaclass=Mymeta): #MySQL=Mymeta(...)

    def __init__(self, ip, port):

        self.ip = ip

        self.port = port

obj1=MySQL()

obj2=MySQL()

obj3=MySQL()

obj4=MySQL('1.1.1.3',3302)

print(obj1)

print(obj2)

print(obj3)

print(obj4)

'''

四:

在singleton文件中

import settings

class MySQL:

    print('run....')

    def __init__(self, ip, port):

        self.ip = ip

        self.port = port

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

在test文件中

def f1():

    from singleton import instance

    print(instance)

def f2():

    from singleton import instance,My

    SQL

    print(instance)

    obj=MySQL('1.1.1.3',3302)

    print(obj)

f1()

f2()