我正在寻找使用Python给出最佳实践,设计模式和SOLID原理示例的任何资源。
我正在寻找使用Python给出最佳实践,设计模式和SOLID原理示例的任何资源。
Answers:
这些重叠
另一个资源是Python食谱中的示例。很多人没有遵循最佳实践,但是您可以在其中找到一些有用的模式
要更深入地了解设计模式,您应该查看设计模式:可重用的面向对象软件的元素。源代码不是Python中的代码,但是不需要您了解这些模式。
在调用可能存在或不存在的对象的属性时,可以用来简化代码的方法是使用Null对象设计模式(在Python Cookbook中引入了Null对象设计模式)。
大致来说,使用Null对象的目标是为Python中常用的原始数据类型None或其他语言中的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”一书中的模式是如何出现的。有些模式消失了-也就是说,语言功能直接支持它们,有些模式更简单或具有不同的关注点,而有些则基本上没有变化。