Discuss / Python / 装饰器实现参数检查

装饰器实现参数检查

Topic source

import functools, unittest

def check_score(func): @functools.wraps(func) def wrapper(args, *kwargs):

    # print(args[0].score)
    if not isinstance(args[0].get_score(), int):
        raise TypeError('Except an integer')
    if not 0 <= args[0].get_score() <= 100:
        raise ValueError('Except 0 <= score <= 100')
    return func(*args, **kwargs)
    # return 'Check over'
return wrapper

class Student(object): def init(self, name, score): self.name = name self.score = score

def get_score(self):
    return self.__score

@check_score
def get_grade(self):
    if self.__score < 60:
        return 'C'
    elif self.__score < 80:
        return 'B'
    else:
        return 'A'

  • 1

Reply