我正在寻找任何资源,提供最佳实践,设计模式和 SOLID 原则使用 Python 的例子。
你可以开始 给你和 给你。
要更深入地了解设计模式,应该看看 设计模式: 可重用面向对象软件的元素。源代码不在 Python 中,但是您不需要使用 Python 来理解模式。
这些有些重叠
Python 中级和高级软件木工
像 Python 一样的代码: 惯用 Python
Python 习语与效率
Google 开发者日美国-Python 设计模式
另一个资源是通过例子在 巨蟒食谱。很多人不遵循最佳实践,但您可以在其中找到一些有用的模式
您可能还希望阅读此 文章(选择。Pdf 文件) ,其中讨论了动态面向对象语言(即 Python)中的设计模式。引用下面的话:
这篇文章探讨了“四人帮”(gOF)一书中的模式在使用动态的、高阶的、面向对象程序设计的语言解决类似问题时是如何出现的。有些模式消失了——也就是说,它们直接受到语言特性的支持,有些模式更简单或者有不同的重点,而有些模式基本上没有改变。
Bruce Eckel 的 用 Python 思考在很大程度上依赖于设计模式
类型
>>> import this
在 Python 控制台中。
虽然这通常被看作是一个笑话,但是它包含了一些有效的特定于 Python 的公理。
当对可能存在或可能不存在的对象调用属性时,您可以使用 空对象设计模式(我在 Python 烹饪书中介绍过)来简化代码。
粗略地说,使用 Null 对象的目标是提供一个“智能”对象 经常使用的基本数据类型的替换 其他语言中的 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。
Null("any", "params", "you", "want").attribute_that_doesnt_exists()
pass
通常你会这样做
if obj.attr: obj.attr()
用这个,你只需要:
obj.attr()
请注意,广泛使用 Null对象可能会在代码中隐藏 bug。
Null