代码优先:
def singleton(cls):
instances = {}
def get_instance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return get_instance
@singleton
class A:
#...
好的,上面的代码是Singleton的一个实现,我看到了this implementation in another post。
我不明白为什么单例函数返回一个函数但A是一个类。 它是如何工作的?
答案 0 :(得分:1)
当你在装饰后调用MyClass()
时,你是对的 - 你实际上并没有调用一个类,你正在调用一个函数。
该函数调用类if cls not in instances
并缓存它,然后返回缓存的实例。
换句话说,没有理由MyClass()
必须直接调用该类 - 只要它返回一个类的实例,它就会按预期工作。
答案 1 :(得分:1)
A最终不是一个类。 A类被创建,但随后被singleton返回的函数替换。所以最后,A最终成为一个功能。
但是,既然你调用一个类来创建一个对象,它最终会以相同的方式工作。但isinstance不起作用。
P.S。你可能不应该使用单身人士。在python中,它几乎总是错误的选择。