python设计模式

Ted*_*ith 164 python design-patterns

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

Ed.*_*Ed. 151

这些中有些重叠

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

代码像Pythonista:惯用语Python

Python成语和效率

Google Developers Day US - Python设计模式

另一个资源是Python Recipes的例子.一个好的数字不遵循最佳实践,但你可以找到一些有用的模式


Ano*_*ous 24

类型

>>> import this
Run Code Online (Sandbox Code Playgroud)

在Python控制台中.

虽然这通常被视为一个(精细的!)笑话,但它包含一些有效的特定于python的公理.


lea*_*ncz 13

布鲁斯·埃克尔(Bruce Eckel)的" 思考Python "(Thinking in Python)严重依赖于设计模式

  • 请注意,根据[wiki](http://wiki.python.org/moin/AdvancedBooks),不再维护本书. (2认同)

Bri*_*ndy 6

你可以在这里这里开始.

要深入了解设计模式,您应该查看设计模式:可重用面向对象软件的元素.源代码不在Python中,但不需要您了解模式.

  • 我认为理解如何使用惯用python来实现设计模式非常重要.它是一种与用于GOF的C++完全不同的语言,因此从C++移植到python将导致非pythonic代码. (7认同)

Est*_*ber 5

在可能存在或可能不存在的对象上调用属性时,可以用来简化代码的东西是使用Null对象设计模式(我在Python Cookbook中介绍过).

粗略地说,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"
Run Code Online (Sandbox Code Playgroud)

有了它,如果你这样做Null("any", "params", "you", "want").attribute_that_doesnt_exists()不会爆炸,但只是默默地成为相当于pass.

通常你会做类似的事情

if obj.attr:
    obj.attr()
Run Code Online (Sandbox Code Playgroud)

有了这个,你只需:

obj.attr()
Run Code Online (Sandbox Code Playgroud)

并忘掉它.请注意,对Null对象的广泛使用可能会隐藏代码中的错误.