一、元类的定义:
类似于创建类的模板,所有的类都是通过他来创建的,可以自由控制类的创建过程。
可以创建单例模式、ORM模式
二、通过元类实现一个单例模式:
class Singleton(type):
def __init__(self, *args, **kwargs):
print('in __init__')
self.__instance = None # 实现单例模式,定义一个成员变量
super(Singleton, self).__init__(*args, **kwargs)
def __call__(self, *args, **kwargs):
print('in __call__')
if self.__instance is None: # 成员变量不为空,就会拦截,不会创建新的实例,也不会打印下面的内容
self.__instance = super(Singleton,self).__call__(*args, **kwargs)
print(type(self.__instance))
return self.__instance
class Myclass(metaclass=Singleton):
pass
mc1 = Myclass()
mc2 = Myclass()
print(mc1)
print(mc2)
print(mc1 == mc2)
执行结果如下图:
mc1和mc2的ID是一样的。