python 元类型编程, 单例模式SingleTon的一种实现方式
原理:利用元类型,重新定义类实例化一个新对象的方法(__call__)行为。让其只返回同一个实例。
#-*- coding: UTF-8 -*- #------------------------------------------------------------------------------- # Name: ģ��shell # Purpose: Ӧ�ó����main��ں��� # # Author: ankier # # Created: 26-10-2012 # Copyright: (c) ankier 2012 # Licence: <your licence> #------------------------------------------------------------------------------- class SingleTonMeta(type): ## @summary: 类初始化一个新的对象时,call到的方法。 def __call__(cls, *args): if not hasattr(cls, 'instance'): cls.instance = super(SingleTonMeta, cls).__call__(*args) #返回单实例 return cls.instance class Cache(object): __metaclass__ = SingleTonMeta def main(): cache1 = Cache()# 将call SingleTonMeta.__call__ cache2 = Cache()# 将call SingleTonMeta.__call__ print cache1 == cache2 if __name__ == '__main__': main()
运行效果:
True <__main__.Cache object at 0x00BB7B30> <__main__.Cache object at 0x00BB7B30>
都是指向同一个地址,同一个实例。