python实现单例模式的三种方式及相关知识解释
python實現單例模式的三種方式及相關知識解釋
- 模塊模式
- 裝飾器模式
- 父類重寫new繼承
單例模式作為最常用的設計模式,在面試中很可能遇到要求手寫.從最近的學習python的經驗而言,singleton實現的四種方法都是python的重要特征,反過來也剛好是幾種特征的最佳實現.(比如你平常開發中很難遇到幾個需要寫元類的地方)如果不能隨手寫出某種實現,說明你對于那種實現的概念還沒有完全掌握.最近場通過寫裝飾器模式的singleton來復習裝飾器概念.
1. module實現
#模塊實現 from Singleton import instanceinstance<Singleton.Singleton at 0x19cf6691240> #Singleton.py class Singleton(object): passinstance = Singleton()
知識點關聯?
python導入模塊時即將模塊運行一遍,可定義__all__變量指定那些變量可以被外部引用
2. 裝飾器實現
#decorator裝飾器實現 def Singleton(cls):#instance作為字典變量寫在外部,可以保證該裝飾器的重用性_instances = {}def getinstance(*arg,**kwarg):if cls not in _instances:_instances[cls] = cls(*arg,**kwarg)return _instances[cls]return getinstance @Singleton class A(object):pass a = A() b = A()print(id(a)) #2268820031976
print(id(b)) #2268820031976
1 a is b 2 3 True 4 5 A.__name__ 6 7 'getinstance'
從學習過程來看,裝飾器學習的要點在于理解at語法等于一次A = Singleton(A).裝飾過后A.__name__查看可以發現已經變成getinstance,在裝飾器的getinstance之前使用functool.wrap可以解決問題.
3. 父類繼承實現
#父類重寫__new__ class Singleton(object):_instance = Nonedef __new__(cls,*arg,**kwarg):if not cls._instance:cls._instance = super(Singleton,cls).__new__(cls, *arg, **kwarg)return cls._instanceclass A(Singleton):
pass
通過這個例子可以了解到父類都可以做些什么,無非是提前定義變量和函數.通過重寫__new__函數,改變了A類別創建實例的過程.
推廣開來的話,基本上本文的四個例子都是在”改變創建實例的過程”.包括JAVA中實現單例的幾種方法也是同個道理.記住了這一點,知識便有了線索,就算下次忘了細節,也能沿著線索重新回憶所學過的內容.
將程序設計的思想應用到學習過程中,從例子中抽象得出原理,可以提高學習效率.
轉載于:https://www.cnblogs.com/daijingkun/p/10752669.html
總結
以上是生活随笔為你收集整理的python实现单例模式的三种方式及相关知识解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知识图谱-架构图
- 下一篇: [随笔重写] Python3 的深拷贝与