我已经阅读了许多解释如何在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吗?这个单例实现有什么问题?
答案 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也是一个品味问题。