pythondevise模式

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

这些有些重叠

Python中的中级和高级软件木工

像Pythonista一样的代码:习惯Python

Python习语和效率

美国Google开发者日 – Pythondevise模式

另一个资源是Python食谱中的例子。 好的数字并不遵循最佳实践,但您可以在那里find一些有用的模式

types

>>> import this 

在Python控制台中。

虽然这通常被当作一个(好的)笑话,但它包含了一些有效的python特定的公理。

Bruce Eckel的“ 用Python进行思考 ”很大程度上依赖于devise模式

你可以在这里和这里开始。

为了更深入地了解devise模式,您应该查看“可重用面向对象软件的devise模式:元素” 。 源代码不在Python中,但不需要让您了解模式。

在调用可能存在或不存在的对象的属性时,可以用来简化代码的方法是使用空对象devise模式 (我在Python Cookbook中介绍过)。

粗略地说,Null对象的目标是为Python中经常使用的基本数据typesNone或其他语言中的Null(或Null指针)提供“智能”replace。 这些用途被用于许多目的,包括一些其他类似元素的一个成员由于任何原因而特殊的重要情况。 大多数情况下,这会导致条件语句区分普通元素和原始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对象可能会隐藏代码中的错误。

您也可以阅读本文 (select.pdf文件),其中讨论了dynamic面向对象语言(即Python)中的devise模式。 引用该页面:

本文探讨了如何使用dynamic的,更高阶的面向对象的编程语言解决类似的问题时,“四人帮”或“GOF”书籍中出现的模式。 一些模式消失 – 也就是说,它们直接被语言特征所支持,一些模式更简单或者有不同的重点,有些模式基本上没有改变。