Учебники

Шаблоны дизайна Python — Анти

Анти-шаблоны следуют стратегии в противоположность предопределенным шаблонам дизайна. Стратегия включает в себя общие подходы к общим проблемам, которые могут быть формализованы и могут рассматриваться как хорошая практика развития. Обычно анти-паттерны противоположны и нежелательны. Анти-паттерны — это определенные паттерны, используемые при разработке программного обеспечения, которые считаются плохими практиками программирования.

Важные особенности анти-паттернов

Давайте теперь рассмотрим несколько важных особенностей анти-паттернов.

правильность

Эти шаблоны буквально нарушают ваш код и заставляют вас делать неправильные вещи. Ниже приводится простая иллюстрация этого —

class Rectangle(object):
def __init__(self, width, height):
self._width = width
self._height = height
r = Rectangle(5, 6)
# direct access of protected member
print("Width: {:d}".format(r._width))

Ремонтопригодность

Программа считается ремонтопригодной, если ее легко понять и изменить в соответствии с требованиями. Импорт модуля можно рассматривать как пример ремонтопригодности.

import math
x = math.ceil(y)
# or
import multiprocessing as mp
pool = mp.pool(8)

Пример анти-паттерна

Следующий пример помогает в демонстрации анти-паттернов —

#Bad
def filter_for_foo(l):
   r = [e for e in l if e.find("foo") != -1]
   if not check_some_critical_condition(r):
      return None
   return r

res = filter_for_foo(["bar","foo","faz"])

if res is not None:
   #continue processing
   pass

#Good
def filter_for_foo(l):
   r = [e for e in l if e.find("foo") != -1]
   if not check_some_critical_condition(r):
      raise SomeException("critical condition unmet!")
   return r

try:
   res = filter_for_foo(["bar","foo","faz"])
   #continue processing

except SomeException:
   i = 0
while i < 10:
   do_something()
   #we forget to increment i

объяснение

Пример включает демонстрацию хороших и плохих стандартов для создания функции в Python.