Python类方法的装饰器中传入类变量

之前我是这样写的

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()

发表评论

[/0o0] [..^v^..] [0_0] [T.T] [=3-❤] [❤.❤] [^v^] [-.0] [!- -] [=x=] [→_→] [><] 更多 »
昵称

抢沙发~