美文网首页
单例模式和装饰器

单例模式和装饰器

作者: nine_9 | 来源:发表于2018-03-26 17:48 被阅读13次

1 使用__new__方法

class Singleton(object):

    def __new__(cls, *args, **kw):

        if not hasattr(cls, '_instance'):

            orig = super(Singleton, cls)

            cls._instance = orig.__new__(cls, *args, **kw)

        return cls._instance

class MyClass(Singleton):

    a = 1

>>> one = MyClass()

>>> two = MyClass()

>>> one == two

True

>>> one is two

True

>>> id(one), id(two)

(4303862608, 4303862608)

2 共享属性

创建实例时把所有实例的__dict__指向同一个字典,这样它们具有相同的属性和方法.

class Borg(object):

    _state = {}

    def __new__(cls, *args, **kw):

        ob = super(Borg, cls).__new__(cls, *args, **kw)

        ob.__dict__ = cls._state

        return ob

class MyClass2(Borg):

    a = 1

3 装饰器版本

def singleton(cls, *args, **kw):

    instances = {}

    def getinstance():

        if cls not in instances:

            instances[cls] = cls(*args, **kw)

        return instances[cls]

    return getinstance

@singleton

class MyClass:

装饰器

def deco(func):

    def _deco():

        print 'before func'

        func()

        print 'after func'

    return _deco

@deco

def myfunc():

    print 'myfunc() called'

myfunc()

执行结果

[图片]

相关文章

  • 单例模式

    1.利用装饰器实现单例模式 2.修改new方法实现单例模式 3.利用元类实现单例模式 总结: 用装饰器和元类实现的...

  • 通过模块功能实现单例模式

    一般说到python实现单例模式,都会想到各种装饰器的途径来构造 装饰器途径构造单例模式参考文档:python装饰...

  • 单例模式和装饰器

    new方法实现单例模式 装饰器

  • Python两种方式实现单例模式

    装饰器模式实现单例 通过拦截类创建的是模式实现单例 测试结果

  • python面试题-2018.1.30

    问题:如何实现单例模式? 通过new方法来实现单例模式。 变体: 通过装饰器来实现单例模式 通过元类来创建单例模式...

  • PHP的常用设计模式

    1、单例模式 2、工厂模式 3、策略模式 4、装饰器模式

  • 设计模式

    1、单例模式 2、观察者模式 3、装饰器模式 4、工厂模式

  • 单例模式和装饰器

    1 使用__new__方法 class Singleton(object): def __new__(cls,...

  • 【iOS】设计模式

    1。建造型模式Creational 单例模式Singleton 2。结构型模式Structural MVC 装饰器...

  • python的单例模式

    单例模式定义:具有该模式的类只能生成一个实例对象。优点:具有很高的解耦性和灵活性 创建实现单例模式的装饰器 创建一...

网友评论

      本文标题:单例模式和装饰器

      本文链接:https://www.haomeiwen.com/subject/tcnrcftx.html