В этой серии я буду помещать специальные вещи, которые я использую в Python, которые могут быть полезны другим.

Сортировка классов с помощью простой функции сортировки ИЛИ Как сделать ваши классы сортируемыми

Если вы используете классы, чтобы сделать вашу [научную] программу более модульной и расширяемой, вам может понадобиться сортировать объекты, созданные из ваших собственных классов (определяемых пользователем классов). Если пользовательский класс имеет шесть дополнительных особых методов (помимо тех, которые вы создали до сих пор). Таким образом, вы сделали свой класс сортируемым (можно сортировать по методу сортировки).

Например, предположим, что у вас есть класс Line с переменной len. Чтобы отсортировать набор (список) объектов, созданных из этого класса, с помощью функции sort(), он должен иметь следующие методы. sort() будет использовать эти методы для сортировки. Таким образом вы сообщаете Python, что ваши объекты можно сравнивать этими способами. Другими словами, строку1 и строку2 (два объекта класса Line) можно сравнить таким образом: строка1 больше, чем строка2, если функция __gt__ возвращает True.

class Line():
  def __init__(self, len):
    self.len = len
  # for less than comparison
  def __lt__(self, other):
      return int(self.len) < int(other.len)

  # for less than or equal to comparison
  def __le__(self, other):
      return int(self.len) <= int(other.len)

  # for greater than comparison
  def __gt__(self, other):
      return int(self.len) > int(other.len)

  # for greater than or equal to comparison
  def __ge__(self, other):
      return int(self.len) >= int(other.len)

  # for equal to comparison
  def __eq__(self, other):
      return int(self.len) == int(other.len)

  # for not equal to comparison
  def __ne__(self, other):
      return int(self.len) != int(other.len)
      
  def __repr__(self):
      return "My Length is: " + str(self.len)
  
l1 = Line(len = 5)
l2 = Line(len = 9)
l3 = Line(len = 1)

line_list = [l1,l2,l3]

print("       Before Sort: ",line_list)
line_list.sort()
print("        After Sort: ",line_list)
line_list.sort(reverse=True)
print("After Reverse-Sort: ",line_list)

Результатом приведенного выше кода будет:

Перед сортировкой: [Моя длина: 5, Моя длина: 9, Моя длина: 1]
После сортировки: [Моя длина: 1, Моя длина: 5, Моя длина: 9 ]
После обратной сортировки: [Моя длина: 9, Моя длина: 5, Моя длина: 1]

Обратите особое внимание на метод __repr__. С помощью этого метода мы можем легко использовать метод «print» для печати соответствующей информации в наших классах. Каждый класс, имеющий этот метод, может возвращать свою информацию в этом методе. метод печати вызовет метод __repr__ этого класса.

Словари: наличие более одного значения для ключа

Словари в Python имеют «ключ» и «значения». Но вопреки названию. «ключи» не обязательно должны быть уникальными. Чтобы иметь дополнительные значения для одного конкретного ключа, мы можем использовать оператор «+», как в следующем коде.

d = dict()
d['1'] = ['7']
d['1'] += ['8']

В приведенном выше коде у нас будет словарь «d», который имеет два значения «7» и «8» для одного ключа «1».

d
Out[10]: {'1': ['7', '8']}