• 单例模式装饰器


    装饰器是什么,装饰器就一函数而已。

    但此函数的参数与常规函数不同,此函数的参数是一个函数对象。常规函数的参数一般是字符串 数字什么的。

    函数的参数可以是一个函数,也可以是一个类。

     1 #coding=utf8
     2 from functools import wraps
     3 
     4 
     5 def singleton(cls):
     6     print cls
     7     instances = {}
     8     @wraps(cls)
     9     def getinstance(*args, **kw):
    10         if cls not in instances:
    11             instances[cls] = cls(*args, **kw)
    12         return instances[cls]
    13     return getinstance
    14 
    15 
    16 @singleton
    17 class MyClass(object):
    18     a = 1
    19 
    20 m1=MyClass()
    21 m2=MyClass()
    22 
    23 print m1 is m2

     singleton(MyCalss)的结果是 第13行的 getinstance,MyClass指向getinstance

    getinstance是一个函数。

    MyClass()  就是 getinstance()了。

    getinstance()的结果是第12行.

    当类成员instances这个字典中没有 MyClass键的时候,那么创建一个键值对,键是MyClass,值是MyClass()。当有MyClass键的时候,返回字典中的MyClass键的值。

    说白了是闭包加强版,外层传了一个参数,参数是一个函数或类。

    只要把这个装饰器加到任意一个类,那么那个类就是单例模式的类。

  • 相关阅读:
    css基础--Display(显示) and Visibility(可见性)and position (定位)
    css3基础--Margin(外边距)&&padding(外边距)
    前端求职-js
    前端求职-html&css
    css基础3--box module&Border
    css基础-font&link&list属性
    值得学习的PHP
    c++构造函数浅析
    变量定义原则
    函数
  • 原文地址:https://www.cnblogs.com/ydf0509/p/8311026.html
Copyright © 2020-2023  润新知