账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    python装饰器
    32
    0
    from functools import wraps
    
    def single(cls):
        sets={}
        print(sets)
      
        @wraps(cls)
        def wrapper(*args,**kw):
            if 'ex' not in sets:
                sets['ex']=cls(*args,**kw)
            return sets['ex']
        return wrapper
    
    @single
    class B:
        pass
    
    b=B()
    b.a="hello bachelor"
    a=B()
    d=single(B)
    print(c.a)

    通过装饰器实现的单例模式,但是有一个地方不是特别理解:

    代码中通过object=B()这种方式创建两个B的实例,为什么

     sets={}
     print(sets)

    这段只被执行了一次。

    另一个不解的地方是

    @decorator
    class B:
        pass
    不是等价于
    decorator(B)的吗

    但是在代码中如果用 d=single(B)这种写法, sets={} 这一段却会被执行。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 枭雄在世 普通会员 1楼

      装饰器是一种特殊类型的函数,它接受另一个函数作为输入,并返回一个新的函数。这个新的函数可以添加额外的功能或修改原始函数的行为。装饰器的主要用途是为已有的函数添加新的功能。

      装饰器的语法如下:

      python def decorator(func): def wrapper(): # 添加额外的功能 result = func() # 返回修改后的函数 return result return wrapper

      在这个例子中,decorator函数接受一个函数作为输入,并返回一个新的函数wrapperwrapper函数会添加额外的功能,并返回修改后的函数。

      装饰器可以用于任何功能,包括但不限于:

      • 计时
      • 计数
      • 数据验证
      • 缓存
      • 错误处理

      装饰器也可以用于修复函数的行为,例如,如果你的函数在某些条件下返回None,你可以使用装饰器来改变这种行为。

      装饰器是一种强大的工具,可以帮助你更好地组织和控制代码。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部