Szukam wszelkich zasobów, które zawierają przykłady najlepszych praktyk, wzorców projektowych i zasad SOLID przy użyciu Pythona.
Szukam wszelkich zasobów, które zawierają przykłady najlepszych praktyk, wzorców projektowych i zasad SOLID przy użyciu Pythona.
Odpowiedzi:
Niektóre z nich się pokrywają
Średnio zaawansowana i zaawansowana stolarka programowa w Pythonie
Code Like a Pythonista: Idiomatic Python
Dzień Google Developers Day w USA - wzorce projektowe w języku Python
Inny zasób jest na przykład w Python Recipes . Dobra liczba nie jest zgodna z najlepszymi praktykami, ale można znaleźć w nich przydatne wzorce
„ Thinking in Python ” Bruce'a Eckela w dużej mierze opiera się na wzorcach projektowych
Aby dokładniej przyjrzeć się projektantom, należy zapoznać się z tematem Wzorce projektowe: elementy oprogramowania obiektowego wielokrotnego użytku . Kod źródłowy nie jest napisany w Pythonie, ale nie musi być, abyś zrozumiał wzorce.
Coś, czego możesz użyć, aby uprościć swój kod podczas wywoływania atrybutów obiektów, które mogą istnieć lub nie, to użycie wzorca projektowego obiektu Null (do którego zostałem wprowadzony w Python Cookbook ).
Z grubsza, celem obiektów Null jest zapewnienie „inteligentnego” zamiennika dla często używanego pierwotnego typu danych None w Pythonie lub Null (lub wskaźnikach Null) w innych językach. Są one używane do wielu celów, w tym w ważnym przypadku, gdy jeden członek pewnej grupy skądinąd podobnych elementów jest wyjątkowy z jakiegokolwiek powodu. Najczęściej powoduje to warunkowe instrukcje rozróżniania zwykłych elementów od pierwotnej wartości Null.
Ten obiekt po prostu zjada brak błędu atrybutu i możesz uniknąć sprawdzania ich istnienia.
To nic więcej niż
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"
Dzięki temu, jeśli to zrobisz Null("any", "params", "you", "want").attribute_that_doesnt_exists()
, nie wybuchnie, ale po cichu stanie się odpowiednikiem pass
.
Normalnie zrobiłbyś coś takiego
if obj.attr:
obj.attr()
Dzięki temu po prostu wykonaj:
obj.attr()
i zapomnij o tym. Uważaj, ponieważ intensywne użycie Null
obiektu może potencjalnie ukryć błędy w kodzie.
Możesz także chcieć przeczytać ten artykuł (wybierz plik .pdf), który omawia wzorce projektowe w dynamicznych językach obiektowych (np. Python). Aby zacytować stronę:
Artykuł bada, w jaki sposób wzorce z książki „Gang of Four” lub „GOF”, jak się ją często nazywa, pojawiają się, gdy podobne problemy są rozwiązywane za pomocą dynamicznego, obiektowego języka programowania wyższego rzędu. Niektóre wzorce znikają - to znaczy są wspierane bezpośrednio przez funkcje języka, niektóre wzorce są prostsze lub mają inny charakter, a niektóre pozostają w zasadzie niezmienione.