python类的魔法方法和装饰器

装饰器

闭包装饰器

装饰器的本质就是一个闭包, 闭包三要素:1 函数嵌套, 2 外部函数返回内部函数的引用, 内部函数使用外部函数的变量
1 使用装饰器简单实现一个登录校验功能

In [1]: user = {
   "username": "123", "password": 123}
 def outter(func):
   ...:     def inner(*args, **kwargs):
   ...:         if user.get('token'):
   ...:             return func(*args, **kwargs)
   ...:         else:
   ...:             username = input("user:")
   ...:             password = input("pwd:")
   ...:             if user.get("username") == username:
   ...:                 user['token'] = True
   ...:                 print("login success")
   ...:                 return func(*args, **kwargs)
   ...:             else:
   ...:                 raise ValueError('login faild')
   ...:     return inner
   ...:

In [8]: @outter     # func = outer(tests)
   ...: def tests(a, b):
   ...:     print('tests result:',a*b)
   ...:

In [9]: tests(2,4)   # outer(tests)(2, 4)
user:123
pwd:123
login success
tests result: 8

In [10]: tests(2,4)
tests result: 8

In [11]: tests(2,9)
tests result: 18

类中使用的默认装饰器

@classmethod

类中装饰@classmethod魔法方后就属于类方法, 传的第一个参数就是类对象, 可以直接被类对象调用,类方法也可以被实例方法调用,但是类方法不能调用实例方法
使用场景:对于不需要实例化调用的时候调用

 class Method:
    ...:     def __init__
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值