code: def sort_objs_by_attr(objs, key, reverse=False):
      
      if len(objs) == 0:
          return []
      if not hasattr(objs[0], key):
          raise AttributeError('{0} object has no attribute {1}'.format(type(objs[0]), key))
      result = sorted(objs, key=attrgetter(key), reverse=reverse)
      return result
docs: 对原生不支持比较操作的对象根据属性排序
  
      :param:
          * objs: (list) 需要排序的对象列表
          * key: (string) 需要进行排序的对象属性
          * reverse: (bool) 排序结果是否进行反转，默认为 False，不进行反转
  
      :return:
          * result: (list) 排序后的对象列表
  
      举例如下::
  
          print('--- sorted_objs_by_attr demo---')
  
  
          class User(object):
              def __init__(self, user_id):
                  self.user_id = user_id
  
  
          users = [User(23), User(3), User(99)]
          result = sorted_objs_by_attr(users, key='user_id')
          reverse_result = sorted_objs_by_attr(users, key='user_id', reverse=True)
          print([item.user_id for item in result])
          print([item.user_id for item in reverse_result])
          print('---')
  
      执行结果::
  
          --- sorted_objs_by_attr demo---
          [3, 23, 99]
          [99, 23, 3]
          ---