python设计模式

python design patterns

我正在寻找任何资源,这些资源提供了使用Python的最佳实践、设计模式和可靠原则的示例。


其中有些重叠

Python中高级软件木工

类似于pythonista的代码:惯用的python

python习惯用法和效率

谷歌开发者日美国-python设计模式

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


类型

1
>>> import this

在python控制台中。

虽然这通常被视为(很好!)开个玩笑,它包含一些有效的特定于Python的公理。


布鲁斯·埃克尔的"Python思维"非常注重设计模式。


你可以从这里开始。

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


在对可能存在或可能不存在的对象调用属性时,可以使用一些简化代码的方法,那就是使用空对象设计模式(我在python手册中介绍了这种模式)。

Roughly, the goal with Null objects is to provide an 'intelligent'
replacement for the often used primitive data type None in Python or
Null (or Null pointers) in other languages. These are used for many
purposes including the important case where one member of some group
of otherwise similar elements is special for whatever reason. Most
often this results in conditional statements to distinguish between
ordinary elements and the primitive Null value.

这个对象只吃属性错误的不足,您可以避免检查它们的存在。

只不过是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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的等价物。

通常你会做一些像

1
2
if obj.attr:
    obj.attr()

有了这个,你就可以:

1
obj.attr()

忘了它吧。注意,广泛使用Null对象可能会在代码中隐藏错误。


您可能还希望阅读本文(选择.pdf文件),其中讨论了动态面向对象语言(即python)中的设计模式。引用页面:

This paper explores how the patterns from the"Gang of Four", or"GOF" book, as it is often called, appear when similar problems are addressed using a dynamic, higher-order, object-oriented programming language. Some of the patterns disappear -- that is, they are supported directly by language features, some patterns are simpler or have a different focus, and some are essentially unchanged.