Я шукаю будь-які ресурси, які наводять приклади найкращих практик, моделей дизайну та принципів SOLID з використанням Python.
Я шукаю будь-які ресурси, які наводять приклади найкращих практик, моделей дизайну та принципів SOLID з використанням Python.
Відповіді:
Деякі в них перекриваються
Проміжна та вдосконалена столярна програма в Python
Код, як Pythonista: Idiomatic Python
День розробників Google США - Шаблони дизайну Python
Інший ресурс є на прикладі рецептів Python . Хороша кількість не дотримується кращих практик, але ви можете знайти там деякі корисні моделі
" Думаючи Пітон " Брюса Еккеля сильно спирається на шаблони дизайну
Для більш глибокого огляду дизайнерських паркетів слід переглянути схеми дизайну: елементи багаторазового об’єктно-орієнтованого програмного забезпечення . Вихідний код відсутній у Python, але він не повинен бути для вас, щоб зрозуміти шаблони.
Щось ви можете використати для спрощення свого коду під час виклику атрибутів на об'єктах, які можуть бути або не існувати, - це використовувати шаблон дизайну Null Object Design (до якого я був представлений у Python Cookbook ).
Приблизно ціль Null-об'єктів полягає в тому, щоб забезпечити «розумну» заміну часто використовуваного примітивного типу даних None в Python або Null (або Null-покажчики) іншими мовами. Вони використовуються для багатьох цілей, включаючи важливий випадок, коли один член якоїсь групи подібних елементів є особливим з будь-якої причини. Найчастіше це призводить до умовних тверджень для розрізнення звичайних елементів та примітивного значення Null.
Цей об’єкт просто їсть відсутність помилки атрибута, і ви можете уникнути перевірки їх існування.
Це не що інше
class Null(object):
def __init__(self, *args, **kwargs):
"Ignore parameters."
return None
def __call__(self, *args, **kwargs):
"Ignore method calls."
return self
def __getattr__(self, mname):
"Ignore attribute requests."
return self
def __setattr__(self, name, value):
"Ignore attribute setting."
return self
def __delattr__(self, name):
"Ignore deleting attributes."
return self
def __repr__(self):
"Return a string representation."
return "<Null>"
def __str__(self):
"Convert to a string and return it."
return "Null"
При цьому, якщо ви Null("any", "params", "you", "want").attribute_that_doesnt_exists()
це зробите, він не вибухне, а просто мовчки стане еквівалентом pass
.
Зазвичай ти робиш щось подібне
if obj.attr:
obj.attr()
З цим ви просто робите:
obj.attr()
і забути про це. Будьте уважні, що широкомасштабне використання Null
об'єкта потенційно може приховати помилки у вашому коді.
Ви також можете прочитати цю статтю (виберіть .pdf файл), де обговорюються шаблони дизайну на динамічних об'єктно-орієнтованих мовах (наприклад, Python). Щоб цитувати сторінку:
У цьому документі досліджено, як виглядають візерунки з книги "Банда чотирьох" або "GOF", як це часто називають, коли подібні проблеми вирішуються за допомогою динамічної, об'єктно-орієнтованої мови програмування. Деякі зразки зникають - тобто підтримуються безпосередньо мовними особливостями, деякі візерунки простіші або мають інший фокус, а деякі по суті не змінюються.