不是一个具有类方法和属性的类是python中的单例吗?

时间:2016-06-21 11:45:11

标签: python python-2.7

我已经阅读了许多解释如何在python中实现单例的文章,比如 Creating a singleton in Python

我很想知道,不是一个有类方法的类,属性是一个单例类。

e.g。

class my_singleton_class(object):

    _logger = Logger ()   
    _printer = Printer ()

    @classmethod
    def logger(cls):
        return cls._logger

    @classmethod
    def printer(cls):
        return cls._printer

不是pythonic吗?这个单例实现有什么问题?

2 个答案:

答案 0 :(得分:6)

  

我很想知道,不是一个有类方法的类,属性是一个单例类。

没有

根据定义,单例类是一个不能创建超过1个实例的类。

让我们来测试一下:

class my_singleton_class(object):
    _logger = 1
    _printer = 2

    @classmethod
    def logger(cls):
        return cls._logger

    @classmethod
    def printer(cls):
        return cls._printer

print(id(my_singleton_class()))
print(id(my_singleton_class()))
>> 8322128
>> 8322192

我们显然设法创建了这个类的2个不同实例。

这些实例具有共享属性这一事实并不会使此类成为单例。

答案 1 :(得分:1)

技术上,你的例子不是单身人士。单例是一个类的唯一实例,将在整个应用程序中访问。在Python中,单例类是一个只能构建一个实例的类。

但是你的类可以用作单例,因为你将直接使用类本身而不是使用单例对象。

logger = my_singleton_class.logger()

每种语言都允许这样做,我看不到立即或严重的警告。所以恕我直言,无论是pythonic还是nor也是一个品味问题。