python cookbook中通过元类来实现单例模式的代码如下
class Singleton(type):
def __init__(cls, *args, **kwargs):
cls.__instance = None
super().__init__(*args, **kwargs)
def __call__(cls, *args, **kwargs):
if cls.__instance is None:
cls.__instance = super().__call__(*args, **kwargs)
return cls.__instance
else:
return cls.__instance
class Spam(metaclass=Singleton):
def __new__(cls):
return super().__new__(cls)
def __init__(self, a, b):
print("Creating spam")
我看着是有点懵的,因为元类里面有__call__方法。
首先来看看__call__方法的作用,对于一个普通类来说,实现了该方法之后,该类的实例就具有类似于函数的作用,可以进行调用。
class A:
def __call__(self, a, b):
return a+b
a = A()
print(a(1, 2))
# output:
# 3
那么元类的__call__的作用是什么呢?在python中类是元类的实例&#x