单例模式的实现
程序员文章站
2022-07-13 23:38:22
...
1. 重写__new__( ) 方法
# Author:ZJF
class Singletion(object):
def __init__(self,name,age,job):
self.name=name
self.age=age
self.job=job
def __new__(cls, *args, **kwargs):
if not hasattr(cls,'_instance'):
orig = super(Singletion, cls)
cls._instance = orig.__new__(cls,)
return cls._instance
class MyClass(Singletion):
a = 1
a = MyClass('小刚', '25', None)
print(a)
b = MyClass('小明', '26', "teacher")
print(b)
print(a)
2. 共享属性
class Borg(object):
_state = {}
def __init__(self,name,age,job):
self.name=name
self.age=age
self.job=job
def __new__(cls, *args, **kwargs):
ob = super(Borg, cls).__new__(cls,)
ob.__dict__=cls._state
return ob
a = Borg('小刚', '25', None)
print(a.name)
b = Borg('小明', '26', "teacher")
print(b.name)
print(a.name)
a.name="李"
print(a.name,b.name)
3. 装饰器
def singleton(cls,*args,**kwargs):
instances={}
def getinstance(*args,**kwargs):
if cls not in instances:
instances[cls]=cls(*args,**kwargs)
return instances[cls]
return getinstance
@singleton
class Myclass(object):
def __init__(self,name,age,job):
self.name=name
self.age=age
self.job=job
a=Myclass('zt', '36', '保洁')
print(a.name,a)
b=Myclass('zsk', '99', None)
print(b.name,b)