美文网首页
Python中的单例

Python中的单例

作者: 开心人开发世界 | 来源:发表于2019-11-26 16:19 被阅读0次

通常,我们根据需要创建许多类的对象。有时,创建多个对象可能会占用大量资源。

实际示例可以是数据库连接类。您不希望有多个数据库对象,因为一个对象的更改可能会使其他对象不一致。

在这种情况下,我们可以使用单例模式。使用单例模式,我们确保一个类仅创建一个实例。

有几个单例Python中经常使用的,其中包括NoneTrue,和False。事实None是,允许您比较None使用is关键字的单例情况。

在Python中,创建单例模式的典型方法是使用装饰器。您可以阅读Python中的装饰器一文,以了解有关装饰器的更多信息。

假设我们希望在应用程序的整个生命周期中建立一个数据库连接。让我们创建一个单例类来实现我们的目的。

class Singleton:

    def __init__(self, cls):
        self._cls = cls

    def Instance(self):
        try:
            return self._instance
        except AttributeError:
            self._instance = self._cls()
            return self._instance

    def __call__(self):
        raise TypeError('Singletons must be accessed through `Instance()`.')

    def __instancecheck__(self, inst):
        return isinstance(inst, self._cls)

现在,创建数据库连接类:

@Singleton
class DBConnection(object):

    def __init__(self):
        """Initialize your database connection here."""
        pass

    def __str__(self):
        return 'Database connection object'

让我们访问此连接类:

c1 = DBConnection.Instance()
c2 = DBConnection.Instance()

print("Id of c1 : {}".format(str(id(c1))))
print("Id of c2 : {}".format(str(id(c1))))

print("c1 is c2 ? " + str(c1 is c2))

输出:

Id of c1 : 139699882512960
Id of c2 : 139699882512960
c1 is c2 ? True

如果执行以下操作,我们将得到TypeError

try:
    p = DBConnection()
except TypeError as ex:
    print("ERROR: {}".format(ex.message))

我希望本文能帮助您在任何类中实现单例模式。

翻译自:https://medium.com/better-programming/singleton-in-python-5eaa66618e3d

相关文章

  • Python设计模式 之 Borg模式

    Borg模式 是单例模式在python中的变种。传统单例模式在python中,存在继承兄弟类之间状态隔离的问题。 ...

  • 2018-06-19 Python中的单例模式的几种实现方式的及

    转载自: Python中的单例模式的几种实现方式的及优化 单例模式 单例模式(Singleton Pattern)...

  • Python 面向对象7: 单例模式

    一、内容 1.1、单例设计模式 1.2、__new__方法 1.3、Python 中的单例 二、单例设计模式 2....

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • python 单例

    单例022_对象分配空间和初始化.png 目标 单例设计模式 __new__ 方法 Python 中的单例 01....

  • python单例和装饰器

    Python相关分享 单例 单例的定义: 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例...

  • Python中的单例

    单例(Singleton)是一种非常常见的设计模式,通过单例模式应该达到: 一个类只能有一个实例 该实例可被访问 ...

  • Python中的单例

    通常,我们根据需要创建许多类的对象。有时,创建多个对象可能会占用大量资源。 实际示例可以是数据库连接类。您不希望有...

网友评论

      本文标题:Python中的单例

      本文链接:https://www.haomeiwen.com/subject/uiqywctx.html