class SpecObject(object): """自定义父类""" fields_map = {} def fields_toggle(self, **kwargs): """字典键值切换""" default_types = ['str', 'int', 'float', 'dict', 'bool', 'tuple'] if 'fields' in kwargs: self.__dict__ = {key: self.__dict__[key] for key in kwargs['fields']} _dict_ = dict() for key in self.__dict__.keys(): if key in self.fields_map.keys(): # 常规类型 if type(self.__dict__[key]).__name__ in default_types: _dict_[self.fields_map[key]] = self.__dict__[key] # 列表类型 elif type(self.__dict__[key]).__name__ == 'list': if len(self.__dict__[key]) == 0: _dict_[self.fields_map[key]] = self.__dict__[key] elif type(self.__dict__[key][0]).__name__ in default_types: _dict_[self.fields_map[key]] = self.__dict__[key] else: _dict_[self.fields_map[key]] = [item.fields_toggle() for item in self.__dict__[key]] # 空值类型 elif self.__dict__[key] is None: _dict_[self.fields_map[key]] = self.__dict__[key] # 对象类型 else: _dict_[self.fields_map[key]] = self.__dict__[key].fields_toggle() return _dict_ def set_instance(self, **kwargs): """赋值实例""" fields_map = dict([v, k] for k, v in self.fields_map.items()) for field in list(kwargs['data'].keys()): self.__setattr__(fields_map[field], kwargs['data'][field]) @staticmethod def set_specify_instance(**kwargs): """赋值指定实例""" instance = kwargs['instance']() fields_map = dict([v, k] for k, v in instance.fields_map.items()) for field in list(kwargs['data'].keys()): instance.__setattr__(fields_map[field], kwargs['data'][field]) return instance @staticmethod def set_specify_instance_list(**kwargs): """实例数组设值""" list_ = list() for item in list(kwargs['data']): instance = kwargs['instance']() fields_map = dict([v, k] for k, v in instance.fields_map.items()) for field in list(item.keys()): instance.__setattr__(fields_map[field], item[field]) list_.append(instance) return list_