Python怎么实现单例模式?Python入门

  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

(0)

相关推荐

  • Python学习—装饰器

    学习Python已经有一段时间了,陆续学了一些基础部分,但是理解的不是很深刻,每过一段时间就会忘记,所以不得不写一些博客进行记录,加深自己的理解.这两个星期一直在研究装饰器,开始觉得很简单,但是只知其 ...

  • Python学习——面向对象之元类

    文章目录 什么是元类 类的创建过程--元类的引出 自定义元类 `__init__()`.`__new__()`.`__call__()`魔术方法 自定义元类使用`__call__` 自定义元类使用`_ ...

  • Python中的单例模式有几种实现方式?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • 现在Python发展怎么样?Python入门

    当大家问及现在哪门编程语言最火?我该学习哪门编程语言呢?很多人肯定会推荐Python.Python是现在非常热门的编程语言,尤其是随着人工智能.大数据时代的到来,Python变得异常火爆.那么Pyth ...

  • Access和Python有什么区别?入门分享!

    Access和Python学哪个好?当然是Python了,虽然Access和Python都是大数据技术的组成部分,但Python要比Access更具优势. Access是数据库管理系统,Python是 ...

  • VB.NET和Python学习哪个好?入门分享!

    我想大家都知道,VB.NET和Python同属于编程语言,而且都是面向对象的编程语言,那么VB.NET和Python之间有什么不同呢?我想大家都比较好奇,接下来通过这篇文章来看看吧. 其实Python ...

  • Python 数据分析师必备的入门学习路线和技能

    最近几年,做的这些项目,大多与数据分析与算法应用相关.岗位虽然是算法工程师,但是与数据分析打得交道也很多,双管齐下,最后才能确保算法的落地.在几年前,我还想当然地认为做算法的就应该偏重算法研究与应用, ...

  • 学习Python基础教程-在线编程入门-Python教学

    小白也能学会的Python入门课程:就在AI大学堂官网. https://www.aidaxue.com/activity/mutual 课程介绍: 无需安装任何环境,即刻开始学习 在线编程环境,帮你 ...

  • Python的控制语句介绍!入门学习

    学习python的人应该都听说过python的控制语句,那么你知道Python的控制语句有哪些吗?我们一起来看看吧. Python的设计目标之一是让代码具备高度的可阅读性.它设计时尽量使用其它语言经常 ...

  • Python进阶之NumPy快速入门(一)在里面输入conda install numpy命令

    (在里面输入conda install numpy命令) https://m.toutiao.com/is/JT3FDcW/ 前言 NumPy是Python的一个扩展库,负责数组和矩阵运行.相较于传统 ...

  • Python Pandas是什么?Python基础入门

    近年来,随着人工智能.大数据的发展,数据分析行业迎来爆发期,人才需求持续增长,转行数据分析的人越来越多.说起数据分析,小编为大家介绍一个数据分析工具-Pandas. Pandas是什么? Pandas ...