47 lines
835 B
Python
47 lines
835 B
Python
"""
|
|
设计模式 - 单例模式(让一个类只能创建唯一的实例)
|
|
"""
|
|
from functools import wraps
|
|
|
|
|
|
def singleton(cls):
|
|
instances = {}
|
|
|
|
@wraps(cls)
|
|
def wrapper(*args, **kwargs):
|
|
if cls not in instances:
|
|
instances[cls] = cls(*args, **kwargs)
|
|
return instances[cls]
|
|
|
|
return wrapper
|
|
|
|
|
|
@singleton
|
|
class President():
|
|
"""总统(单例类)"""
|
|
|
|
def __init__(self, name):
|
|
self.name = name
|
|
|
|
|
|
def main():
|
|
p1 = President("王大锤")
|
|
p2 = President("奥巴马")
|
|
print(p1.name)
|
|
print(p2.name)
|
|
print(p1 == p2)
|
|
print(p1 is p2)
|
|
print('-' * 30)
|
|
# 取消装饰器
|
|
President2 = President.__wrapped__
|
|
p2 = President2("奥巴马")
|
|
print(p1.name)
|
|
print(p2.name)
|
|
print(p1 == p2)
|
|
print(p1 is p2)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|