目前我正在使用一个相当简单的单例实现。但是,我从来没有在网上看到过这样的建议,这让我相信它可能有问题......
class Singleton:
def __init__():
raise ...
@staticmethod
def some():
pass
@staticmethod
def another():
pass
这种单例实现有什么缺点吗(使所有类成员都是静态的)。它有点类似于将模块用作单例,只是您将所有内容都包装在一个类中。
编辑:我知道 other ways在 Python 中实现单例。我不喜欢它们的是它们都不是显式的(这违背了 Python 禅宗):
因为我做的是 a = Class() 而不是像 a = Class.Instance() 这样的东西,所以我处理的对象并不明显共享状态(见注释 #1)。如果所有成员都是静态的,我至少有 Class.someMethod() 这有点暗示它是一个单例。我不喜欢这种方法的是你不能使用构造函数和析构函数,这消除了单例相对于自由函数的主要优势,这是你在创建和销毁它们时可以做的事情(见注释 #2) .
注意 #1: 我知道我不应该关心单例的状态(如果我这样做,那么它首先就不应该是单例)。我仍然希望它明确说明它是什么类。
注意 #2: 当您创建单例时,您可以在其构造函数中进行一些实例化。例如,在处理图形库的单例中,您可以在构造函数中初始化库。这样实例化和取消实例化会在 sinleton 的构造函数和析构函数中自动发生。
或者在 ResourceManager 中:析构函数可以检查在其销毁时内存中是否仍有资源并采取相应行动。
如果你使用自由函数而不是单例,你必须手动完成所有这些。
请您参考如下方法:
是的,它是一个单例,这就是它的问题所在。如果您打算将所有方法设为静态,则根本不用创建类,只需使用自由函数即可。
