import re from Utils.ErrorUtil import ReturnConditionCheckFailed class ValidateAttr(object): def __init__(self, **kwargs): """""" self.kwargs = kwargs def __get__(self, instance, owner): if self.kwargs['field'] in instance.__dict__: return instance.__dict__[self.kwargs['field']] def __set__(self, instance, value): """""" if 'type' in self.kwargs: """检查实例的属性类型""" if not isinstance(value, self.kwargs['type']): raise ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code']) if 'length' in self.kwargs: """检查实例的属性值长度(一般是str类型)""" if len(value) != self.kwargs['length']: raise ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code']) if 'in_list' in self.kwargs: """检查实例属性是否包含于列表中(属性有列表和非列表两种情况)""" if type(value) is not list: if value not in self.kwargs['in_list']: raise ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code']) else: for item in value: if item not in self.kwargs['in_list']: raise ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code']) if 'instance_list' in self.kwargs: """检查实例列表""" if type(value) is not list: raise ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code']) else: for item in value: if not isinstance(item, self.kwargs['instance_list']): ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code']) if 'func' in self.kwargs: """属性检查函数""" if not list(map(self.kwargs['func'], [value]))[0]: raise ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code']) instance.__dict__[self.kwargs['field']] = value