蟒蛇设计模式

我正在寻找任何资源,提供最佳实践,设计模式和 SOLID 原则使用 Python 的例子。

90985 次浏览

你可以开始 给你给你

要更深入地了解设计模式,应该看看 设计模式: 可重用面向对象软件的元素。源代码不在 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

通常你会这样做

if obj.attr:
obj.attr()

用这个,你只需要:

obj.attr()

请注意,广泛使用 Null对象可能会在代码中隐藏 bug。