装饰类跟使用类实现一个装饰器

# 第一题
def dan_li(cls):
  instances = {}

  def get_instance(*args, **kwargs):
  if cls not in instances:
  instances[cls] = cls(*args, **kwargs)
  return instances[cls]

  return get_instance


@dan_li
class MyTest(object):

  def __init__(self,name):
    self.name = name

  def __call__(self, *args, **kwargs):
    print("练习 call 方法")

  def run(self):
    print(self.name)

m = MyTest("shizi")
m.run()

m = MyTest("laoshu")
m.run()


# 第二题


class Test(object):

  def __init__(self,func):
    self.func = func
    self.name =None

  def __call__(self, *args, **kwargs):
    self.name = "ff"
    if self.check_name():
      print("欢迎")
      return self.func( *args, **kwargs)
    else:
      print("再见")

  def check_name(self):
    if self.name == "ff":
      return True
    else:
      print("名字错误")

@Test
def sum(a,b):
print("测试")
return a+b

@Test
def info():
print("测试")

s = sum(2,3)
print(s)
info()

转载于:https://www.cnblogs.com/666666pingzi/p/10903413.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值