欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

单例模式的实现

程序员文章站 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)