起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > IT培训 > Python怎么实现单例模式?老男孩Python脱产班培训

Python怎么实现单例模式?老男孩Python脱产班培训

时间:2021-06-04 15:41:01来源:未知 作者:老男孩教育 已有: 名学员访问该课程

  快捷搜索:

前言:python如何实现单例模式?Python单例模式是大家最熟悉的一种设计模式,虽然简单,但涉及的内容有很多,而且Python中实现单例模式的方法也有很多,接下来我们一起来看看吧。 第一种方法:使用装饰器 def singleton(cls): instances = {} def wrapper(*args, **kwargs): if cls not in instances: instances[cls] = cls(*args, **kwargs) return ins

  python如何实现单例模式?Python单例模式是大家最熟悉的一种设计模式,虽然简单,但涉及的内容有很多,而且Python中实现单例模式的方法也有很多,接下来我们一起来看看吧。

  第一种方法:使用装饰器

  def singleton(cls):

  instances = {}

  def wrapper(*args, **kwargs):

  if cls not in instances:

  instances[cls] = cls(*args, **kwargs)

  return instances[cls]

  return wrapper

  @singleton

  class Foo(object):

  pass

  foo1 = Foo()

  foo2 = Foo()

  print(foo1 is foo2) # True

  第二种方法:使用基类

  New 是真正创建实例对象的方法,所以重写基类的new 方法,以此保证创建对象的时候只生成一个实例

  class Singleton(object):

  def __new__(cls, *args, **kwargs):

  if not hasattr(cls, '_instance'):

  cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)

  return cls._instance

  class Foo(Singleton):

  pass

  foo1 = Foo()

  foo2 = Foo()

  print(foo1 is foo2) # True

  第三种方法:元类

  元类是用于创建类对象的类,类对象创建实例对象时一定要调用call方法,因此在调用call时候保证始终只创建一个实例即可,type是python的元类

  class Singleton(type):

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

  if not hasattr(cls, '_instance'):

  cls._instance = super(Singleton, cls).__call__(*args, **kwargs)

  return cls._instance

  # Python2

  class Foo(object):

  __metaclass__ = Singleton

  # Python3

  class Foo(metaclass=Singleton):

  pass

  foo1 = Foo()

  foo2 = Foo()

  print(foo1 is foo2) # True

文章出自:http://qh.itpxw.cn/peixun/it/202181727.html

文章标题:Python怎么实现单例模式?老男孩Python脱产班培训



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

(责任编辑:深圳学历教育网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
老男孩教育 访问该机构站点 报名留言 加为好友 用户等级:高级会员 用户级别:0 机构名称:老男孩教育 联 系 人:任女士 联系电话:18710030740 联系手机:18710030740 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件:768386696@qq.com 网站域名:https://www.oldboyedu.com/ 注册时间:2019-03-20 15:03 最后登录:2023-02-02 13:02
推荐内容