python - software - strategy pattern django
patrones de diseño de pitón (6)
Estoy buscando recursos que den ejemplos de mejores prácticas, patrones de diseño y los principios SOLID utilizando Python.
" Thinking in Python " de Bruce Eckel se apoya fuertemente en los patrones de diseño
Algo que puedes usar para simplificar tu código cuando llamas atributos a objetos que podrían o no existir es usar el Patrón de Diseño de Objeto Nulo (al cual fui introducido en el Libro de Cocina de Python ).
A grandes rasgos, el objetivo con los objetos nulos es proporcionar un reemplazo "inteligente" para el tipo de datos primitivo a menudo utilizado None en Python o Null (o punteros nulos) en otros idiomas. Estos se usan para muchos propósitos, incluido el caso importante en el que un miembro de algún grupo de elementos similares es especial por alguna razón. En la mayoría de los casos, esto da como resultado declaraciones condicionales para distinguir entre elementos ordinarios y el valor nulo primitivo.
Este objeto simplemente come la falta de error de atributo y puedes evitar comprobar su existencia.
No es más que
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"
Con esto, si haces Null("any", "params", "you", "want").attribute_that_doesnt_exists()
no explotará, sino que se convertirá silenciosamente en el equivalente de un pass
.
Normalmente harías algo como
if obj.attr:
obj.attr()
Con esto, solo haces:
obj.attr()
y olvídate de eso. Tenga en cuenta que el uso extensivo del objeto Null
puede ocultar errores en su código.
Alguna superposición en estos
Carpintería de software intermedia y avanzada en Python
Código como un Pythonista: Python Idiomático
Ediciones idiomáticas y eficiencia de Python
Google Developers Day US - Patrones de diseño de Python
Otro recurso es por ejemplo en las recetas de Python . Un buen número no sigue las mejores prácticas, pero puedes encontrar algunos patrones que son útiles
Para una visión más detallada de los patrones de diseño, debe consultar Patrones de diseño: elementos del software reutilizable orientado a objetos . El código fuente no está en Python, pero no necesita ser para que entiendas los patrones.
También puede leer este article (seleccione el archivo .pdf), que trata sobre los patrones de diseño en lenguajes orientados a objetos dinámicos (es decir, Python). Para citar la página:
Este documento explora cómo los patrones del libro "Gang of Four", o "GOF", como se le suele llamar, aparecen cuando se abordan problemas similares usando un lenguaje de programación dinámico, de orden superior orientado a objetos. Algunos de los patrones desaparecen, es decir, son compatibles directamente con las características del lenguaje, algunos patrones son más simples o tienen un enfoque diferente, y algunos están esencialmente sin cambios.
Tipo
>>> import this
en una consola de Python.
Aunque esto generalmente se trata como una broma (¡excelente!), Contiene un par de axiomas válidos específicos de Python.