正如agf here出色地回答的那样,Python中可能的Singleton实现可能正在使用这个元类:
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
但是,我不理解使用_instance
。我知道它是用于存储由其类索引的实例的字典。但是,它被声明为类属性(_instances = {}
),并且它被用作cls
(if cls not in cls._instances:
)的属性。这两者怎么可能相同?