这个单身人士出了什么问题?

Pau*_*nta 1 python singleton

目前我正在使用一个相当简单的单例实现.但是,我从来没有在网上看到过这样的建议,这让我觉得它可能有问题......

class Singleton:
    def __init__():
        raise ...

    @staticmethod
    def some():
        pass

    @staticmethod
    def another():
        pass
Run Code Online (Sandbox Code Playgroud)

单例的这种实现是否有任何缺点(使所有类成员都是静态的).它有点类似于使用模块作为单例,除了你把所有东西都包装在一个类中.


编辑:我知道在Python中实现单例的其他方法.我不喜欢它们的是它们都不是显式的(这违背了Python zen):

因为我做的a = Class()不是类似的事情a = Class.Instance(),所以我在处理具有共享状态的对象时并不明显(参见注释#1).如果所有成员都是静态的,我至少有Class.someMethod()哪种类型表明它是单身.我不喜欢这种方法的是你不能使用构造函数和析构函数,它消除了单例对自由函数的主要优势,这是你在创建和销毁它们时可以做的事情(参见注释#2) .

注意#1:我知道我不应该关心单身人士的状态(如果我这样做,那么它首先不应该是单身人士).我仍然希望明确它是什么类.

注意#2:创建单例时,可以在其构造函数中进行一些实例化.例如,在处理图形库的单例中,您可以在constrctor中初始化库.这种方式实例化和解除实例在sinleton的构造函数和析构函数中自动发生.
或者在ResourceManager中:析构函数可以检查在销毁时是否仍然存在内存中的资源并相应地执行操作.
如果你使用自由函数而不是单例,你必须手动完成所有这些.

Cat*_*lus 11

是的,它是一个单身人士,这就是它的错误.如果你要将所有方法都设置为静态,那么根本不打算创建一个类,只需使用自由函数.

  • 嗨,随机的downvoter,我打赌你喜欢单身. (2认同)
  • @Paul:单身人士_are_ [总是不好](http://jalf.dk/blog/2010/03/singletons-solving-problems-you-didnt-know-you-never-had-since-1995/). (2认同)