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