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

# 第一题
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()

猜你喜欢

转载自www.cnblogs.com/666666pingzi/p/10903413.html