Python单例模式

标签 python singleton

有人可以告诉我为什么这是不正确的单例模式:

class preSingleton(object):
    def __call__(self):
        return self

singleton = preSingleton()

# singleton is actually the singleton

a = singleton()
b = singleton()

print a==b  

a.var_in_a = 100
b.var_in_b = 'hello'

print a.var_in_b
print b.var_in_a

编辑: 上面的代码打印:

True
hello
100

非常感谢

第二部分

也许这样更好?

class Singleton(object):
    def __new__(cls):
        return cls

a = Singleton()
b = Singleton()

print a == b

a.var_in_a = 100
b.var_in_b = 'hello'

print a.var_in_b
print b.var_in_a

编辑: 上面的代码打印:

True
hello
100

再次感谢。

最佳答案

在 Python 中创建单例实际上非常简单。诀窍是让模块为您进行封装而不是创建类。

  • 模块只会被初始化一次
  • 模块只有在第一次导入时才会被初始化
  • 任何重新导入模块的尝试都将返回指向现有导入的指针

如果你想假装模块是一个类的实例,你可以这样做

import some_module
class SomeClass(object):
    def __init__(self):
        self.singleton = some_module

关于Python单例模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3037914/

相关文章:

python - 如何调整文本行?

python - Flask peewee 无法在网络服务器上工作

swift - 关于 Swift 中的单例模式

python - @staticmethod 或类外函数?

Python:在基于 distutils 的项目中安装手册页

python - 在 Python 中从字符串中提取多个数字

java - Android 中的 VideoView 无法正确播放视频

java - 不可变类/对象,私有(private)构造函数,工厂方法

android - 在不同的 SQLiteOpenHelper 实例中使用相同的 SQLiteDatabase 实例

java - 何时将静态嵌套类(及其中的静态成员)加载到内存中?