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”书籍中出现的模式。 一些模式消失 – 也就是说,它们直接被语言特征所支持,一些模式更简单或者有不同的重点,有些模式基本上没有改变。