67uyefw 发表于 2017-9-21 09:04:45

Python 实现单例模式

Python 实现单例模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 使用Python实现单例模式

# 方法一: 使用__new__方法
class SingleTon(object):
    def __new__(cls, *args, **kwargs):
      if not hasattr(cls, '_instance'):
            cls._instance = object.__new__(cls, *args, **kwargs)
      return cls._instance


class TestClass(SingleTon):
    a = 1


# 方法二: 使用装饰器(decorator)
def SingleTon1(cls, *args, **kwargs):
    instances = {}
    def _singleTon():
      if cls not in instances:
            instances = cls(*args, **kwargs)
      returninstances
    return _singleTon


@SingleTon1
class TestClass1(object):
    a = 1



# 共享属性属性是共享的,但是并非单例模式
class SingleTon3(object):
    _state = {}
    def __new__(cls, *args, **kwargs):
      obj = object.__new__(cls, *args, **kwargs)
      obj.__dict__ = cls._state
      return obj


class TestClass3(SingleTon3):
    a = 1

test1 = TestClass3()
test2 = TestClass3()
test1.a = 2
print(test1.a)
print(test2.a)
print(test1)
print(test2)






页: [1]
查看完整版本: Python 实现单例模式