之前我是这样写的
def my_decorator(arg):
print(arg)
def new_func(self):
print("my name is " + arg)
return new_func
class A:
def __init__(self, name):
self.name = name
@my_decorator(self.name)
def my_method(self, s):
print(self.name)
a = A("chengyu")
a.my_method()
这样是不行的,因为self的作用域问题,装饰器的参数并不会传到装饰器内部。
一种实现方法是在该方法外部再定义一个方法,这样self就能传入新方法的作用域了,代码如下:
def my_decorator(arg):
print(arg)
def new_func(self):
print("my name is " + arg)
return new_func
class A:
def __init__(self, name):
self.name = name
def my_method(self):
@my_decorator(self.name)
def my_method_inner(self):
print(self.name)
return my_method_inner
a = A("chengyu")
a.my_method()
发表评论
抢沙发~