您的位置:首页 > 游戏 > 游戏 > 怎么做一个网址链接_人工智能在未来可以_网站分析培训班_百度怎么投放广告

怎么做一个网址链接_人工智能在未来可以_网站分析培训班_百度怎么投放广告

2025/5/4 15:19:48 来源:https://blog.csdn.net/m0_67804957/article/details/144176293  浏览:    关键词:怎么做一个网址链接_人工智能在未来可以_网站分析培训班_百度怎么投放广告
怎么做一个网址链接_人工智能在未来可以_网站分析培训班_百度怎么投放广告

一、单例

是一个特殊的类,这个类只能够创建一次实例对象,实例对象初始化值以最后一次为主

二、单例模式

让所有类在实例化时,指向同一个内存地址

三、实现单例模式5种方法

设置单例模式的本质:
1)判断这个实例是否存在;

2)如果存在,则返回这个实例;如果不存在,则创建这个实例对象。

1、通过__new__实现

class Singleton:_instance = None  #属性--用来保存实例对象的引用(类似变量赋值)def __new__(cls, *args, **kwargs):if not cls._instance:cls._instance = super().__new__(cls, *args, **kwargs)return cls._instance

1、定义一个类属性,初始值是None,用于记录单例对象的引用;
2、重写__new__方法;
3、如果类属性是None,调用父类分配空间并在类属性中记录结果;
4、返回类属性中记录的对象引用: 

if条件判断也可以使用hasattr()函数

hasattr()函数判断对象是否包含对应的属性和方法。参数是一个对象和一个字符串,如果字符中是对象的属性值或方法名,函数返回True,否则返回False 

class A:def __init__(self, name):  # 初始化实例方法self.name = name  # 实例属性def __new__(cls, *args,**kwargs):if not hasattr(cls, '_ins'):  # hasattr(cls, '_ins') 为 False,代表对象 _ins 不存在,此时该条件 not hasattr(cls, '_ins') 为真,即此时执行 if 代码块里的内容cls._ins = super(A, cls).__new__(cls)  # 调用父类 __new__ 方法创建实例return cls._ins# 使用
instance1 = A('first_value')
instance2 = A('second_value')
print(instance1.name)  # 输出 'second_value'
print(instance2.name)  # 输出 'second_value'

2、通过@classmethod

class Singleton:_instance = None@classmethoddef get_instance(cls):if cls._instance is None:cls._instance = cls()return cls._instance

3、通过装饰器实现

def singleton(cls):instances = {}def get_instance(*args, **kwargs):if cls not in instances:instances[cls] = cls(*args, **kwargs)return instances[cls]return get_instance@singleton
class MyClass:pass

4、通过导入模块时实现

# singleton.py
class Singleton:pass# 使用时
import singleton
my_singleton = singleton.Singleton()

Python的模块是天然的单例模式,因为模块第一次导入时,只会引用而不会再次执行模块代码

5、通过元类实现

class SingletonMeta(type):_instances = {}def __call__(cls, *args, **kwargs):if cls not in cls._instances:cls._instances[cls] = super().__call__(*args, **kwargs)return cls._instances[cls]class Singleton(metaclass=SingletonMeta):pass

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com