在 Python 中,单例类是单例设计模式的一种实现,这意味着这种类型的类只能有一个对象实例。这有助于在执行一些繁重的操作(如创建数据库连接)时优化内存使用。
如果我们尝试为单例类创建多个对象,则只会在第一次创建对象。之后,将会返回相同的对象实例。
在 Python 中创建单例类
我们可以使用以下方式在 Python 中创建和实现单例类:
使用 __init__
__init__
方法是用于初始化新创建对象的实例方法。当从类创建对象时,会自动调用该方法。
如果我们将此方法与静态方法一起使用并提供必要的检查,即该类的实例是否已经存在,我们可以在创建第一个对象后限制新对象的创建。
示例
在下面的例子中,我们使用 __init__
方法创建一个单例类。
class Singleton:
__uniqueInstance = None
@staticmethod
def createInstance():
if Singleton.__uniqueInstance == None:
Singleton()
return Singleton.__uniqueInstance
def __init__(self):
if Singleton.__uniqueInstance != None:
raise Exception("对象已存在!")
else:
Singleton.__uniqueInstance = self
obj1 = Singleton.createInstance()
print(obj1)
obj2 = Singleton.createInstance()
print(obj2)
当我们运行上述代码时,它将显示以下结果:
<__main__.Singleton object at 0x7e4da068a910>
<__main__.Singleton object at 0x7e4da068a910>
使用 __new__
__new__
方法是 Python 中一个特殊的方法,调用该方法可以创建类的新实例。该方法将类本身作为第一个参数,并返回该类的新实例。
当声明 Python 类的实例时,它会在内部调用 __new__()
方法。如果要实现 Singleton 类,可以重写此方法。
在重写的方法中,首先检查类的实例是否已存在。如果不存在(即实例为 None
),则调用 super()
方法来创建一个新对象。最后,将此实例保存在类属性中并返回结果。
示例
在下面的例子中,我们使用 __new__
方法创建一个单例类。
class SingletonClass:
_instance = None
def __new__(cls):
if cls._instance is None:
print('创建对象')
cls._instance = super(SingletonClass, cls).__new__(cls)
return cls._instance
obj1 = SingletonClass()
print(obj1)
obj2 = SingletonClass()
print(obj2)
上面的代码给出以下结果:
创建对象
<__main__.SingletonClass object at 0x000002A5293A6B50>
<__main__.SingletonClass object at 0x000002A5293A6B50>