流水笔记

面向免费零食和饮料的编程

贴段代码

python的修饰器版singleton模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
def singleton(cls):
    '''
    singleton 模式的修饰器,保留第一次初始化的值
    例:
    @singleton
    class Class:
        def __init__(self, v):
            self.val = v
    a = Class('a')
    b = Class('b')
    则b.val == 'a'
    a is b返回True
    '''
    instance_container = []
    def get_instance(*arg, **args):
        if not len(instance_container):
            instance_container.append(cls(*arg, **args))
        return instance_container[0]
    return get_instance