1. 含有__init__的类
class MyClass:
a = "cherry"
def __init__(self,age,sex):
self.age = age
self.sex = sex
def say(self):
print("hello")
obj = MyClass(age=10,sex="male")
# 给类对象初始化赋值
2. 不添加call方法
class MyDecorator:
def __init__(self, func):
self.func = func
@MyDecorator # work1 =MyDecorator(work1) # 相当于给类对象初始化赋值,参考1中的解释
def work1(a, b):
print("--这是原功能函数")
return a + b
work1 = MyDecorator(work1)
print(work1) # <__main__.MyDecorator object at 0x032F2448> 返回的是MyDecorator多的对象
print(work1())
TypeError: ‘MyDecorator’ object is not callable
3.如果想要被调用,需要加入__call__方法
class MyDecorator:
def __init__(self, func):
self.func = func
**def __call__(self, *args, **kwargs):
print("装饰器扩展的功能1")
res = self.func(*args, **kwargs)
print("装饰器扩展的功能2")
return res**
@MyDecorator # work1 =MyDecorator(work1) # 相当于给类对象初始化赋值
def work1(a, b):
print("--这是原功能函数")
return a + b
work1 = MyDecorator(work1)
print(work1) # <__main__.MyDecorator object at 0x032F2448> 返回的是MyDecorator多的对象
print(work1()) # 此时就不会报错了