栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

python 类方法使用装饰器并使用self

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 类方法使用装饰器并使用self

装饰器放在外面,在inner函数中预设好self参数
def wrap(func):
    def inner(self, *args, **kwargs):
        print(id(self))
        return func(self, *args, **kwargs)

    return inner


class A(object):
    @wrap
    def run(self):
        pass


if __name__ == '__main__':
    a = A()
    print(id(a))
    res = a.run()
带参装饰器
def group(name):
    def wrap(func):
        def inner(self, *args, **kwargs):
            print(id(self))
            self.role = name
            return func(self, *args, **kwargs)

        return inner

    return wrap


class A(object):
    def __init__(self):
        self.role = False

    @group("Student")
    def run(self):
        pass


if __name__ == '__main__':
    a = A()
    print(id(a))
    print(a.role)
    res = a.run()
    print(a.role)

结果

1930845716880
False
1930845716880
Student
类方法作为装饰器
class App:
    def __init__(self):
        self.requests_times = 0

    def route(self, name):
        self.requests_times += 1

        def wrap(func):
            def inner(_self, *args, **kwargs):
                print(id(_self))
                _self.role = name
                return func(_self, *args, **kwargs)

            return inner

        return wrap


app = App()


class A(object):
    def __init__(self):
        self.role = False

    @app.route("Teacher")
    def run(self):
        pass


if __name__ == '__main__':
    a = A()
    print(id(a))
    print(a.role)
    res = a.run()
    print(a.role)
    print(app.requests_times)

结果

2179060134432
False
2179060134432
Teacher
1
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037361.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号