"""
单例类
方法1:外部函数实现
方法2:外部类数实现
方法3:__new__内置函数实现
__new__函数:在实例化开始时,在调用初始化__init__() 方法之前, 首先调用 __new__() 方法
"""
def singleton(cls):
"""
修饰类(实现类单例)
@param cls:
"""
instances = {}
def inner(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args,**kwargs)
return instances[cls]
return inner
#修饰类(实现类单例)
class Singleton(object):
def __init__(self, cls):
self._cls = cls
self._instance = {}
def __call__(self):
if self._cls not in self._instance:
self._instance[self._cls] = self._cls()
return self._instance[self._cls]
#内置函数(实现类单例)
class Singleton1(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_inst'):
cls._inst = super(Singleton1, cls).__new__(cls)
return cls._inst
#内置函数(实现类单例)
class Singleton2(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_inst'):
cls._inst = object.__new__(cls)
return cls._inst
#自定义单列
class Person(object):
def __new__(cls, name, age):
if 0 < age < 100:
return object.__new__(cls)
else:
return None
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f'{self.__class__.__name__}{self.__dict__}'
if __name__ == '__main__':
s1 = Singleton1()
s2 = Singleton1()
print(s1)
print(s2)
p1 = Person('Tom', 10)
p2 = Person('Mike', 200)
print(p1)
print(p2)
"""
单例函数
"""
token=None
def get_token():
global token
if token is None:
token='123'
return token
if __name__ == '__main__':
print(get_token())
print(get_token())