foll。是使用静态方法的样本单例设计模式实现。我的问题是 - 如果我们使用类方法而不是静态方法会有什么区别?
class Singleton:
__instance = None
@staticmethod
def getInstance():
""" Static access method. """
if Singleton.__instance == None:
Singleton()
return Singleton.__instance
def __init__(self):
""" Virtually private constructor. """
if Singleton.__instance != None:
raise Exception("This class is a singleton!")
else:
Singleton.__instance = self
s = Singleton()
print s
s = Singleton.getInstance()
print s
s = Singleton.getInstance()
print s
在Singleton设计模式中,我们仅创建一个在上述实现中实现的类的实例。
我们应该在此处使用静态方法,因为静态方法将具有以下好处:类方法可以访问或修改类状态,而静态方法无法访问或修改它,我们不想修改任何内容,我们只想返回Singleton实例。通常,静态方法对班级状态一无所知。它们是采用一些参数并处理这些参数的实用程序类型方法。另一方面,类方法必须将类作为参数。