Mulle880 2022-10-05 10:31 采纳率: 100%
浏览 15
已结题

Python类里的装饰器

Python装饰器
    def is_crawling(self, func):
        def inner(*arg):
            if self.result:
                return func(*arg)
            return '没有数据'

        return inner

    @is_crawling
    def seek_students(self) -> list:
        """
        查看所有的学生
        :rtype: list
        :return: 所有学生的列表
        """
        students = []
        for i in self.result:
            for desk in self.result[i]:
                for value in desk.values():
                    for owner in value:
                        students.append(owner['owner'])
        return students
运行结果及报错内容

TypeError: is_crawling() missing 1 required positional argument: 'func'

我想要达到的结果

我想要在类里写一个装饰器,在调用方法的时候先查看self的一个属性是否为空,不为空就执行,为空就返回“没有数据”,代码应该如何修改

  • 写回答

1条回答 默认 最新

  • 林地宁宁 2022-10-05 13:57
    关注

    把修饰器提到最外层去,然后修饰器的 self 直接从 *args 里面去拿。

    import functools
    
    def is_crawling(func):
        @functools.wraps(func)
        def inner(*arg):
            assert len(arg) >= 1
            self = arg[0]
            if self.result:
                return func(*arg)
            return '没有数据'
        return inner
    
    class Test:
        @is_crawling
        def seek_students(self) -> list:
            """
            查看所有的学生
            :rtype: list
            :return: 所有学生的列表
            """
            students = []
            for i in self.result:
                for desk in self.result[i]:
                    for value in desk.values():
                        for owner in value:
                            students.append(owner['owner'])
            return students
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月7日
  • 创建了问题 10月5日

悬赏问题

  • ¥15 传人记程序做的plc 485从机程序该如何写
  • ¥15 已知手指抓握过程中掌指关节、手指各关节和指尖每一帧的坐标,用贝塞尔曲线可以拟合手指抓握的运动轨迹吗?
  • ¥50 libwebsockets 如何添加其他socket事件回调
  • ¥50 实现画布拖拽算子排布,通过flink实现算子编排计算,请提供思路
  • ¥15 esium自定义材质拉伸问题
  • ¥15 cmake+mingw使用<mysqlx/xdevapi.h>报错
  • ¥15 eNSP中防火墙的使用
  • ¥15 关于#mlnet#的问题:mlnet相关请求(语言-c#)
  • ¥15 lvgl7.11怎么做出文字被选中的效果
  • ¥50 如何快速查看手机目标app的主要服务器ip
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部