在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()