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的一个属性是否为空,不为空就执行,为空就返回“没有数据”,代码应该如何修改

把修饰器提到最外层去,然后修饰器的 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