class SpecObject(object): """自定义类""" fields_map = {} def dict_keys_toggle(self, **kwargs): """字典键值切换""" _dict_ = dict() default_types = ['str', 'int', 'float', 'dict', 'bool', 'tuple'] for key in self.__dict__.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.dict_keys_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].dict_keys_toggle() if 'columns' in kwargs: _dict_ = {key: _dict_[key] for key in kwargs['columns']} return _dict_ def dict_to_show(self, **kwargs): """字典显示格式""" return self.dict_keys_toggle(**kwargs) def dict_to_save(self, **kwargs): """字典存储格式""" return self.dict_keys_toggle(**kwargs) def dict_to_return(self, **kwargs): """字典返回格式""" @staticmethod def dict_to_set(**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 instance_list_to_set(**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_ @staticmethod def get_attr(_dict_, _key_, **kwargs): """获取字典属性值""" value = kwargs['default'] if kwargs.__contains__('default') else None try: value = _dict_[_key_] except KeyError: pass return value