【问题标题】:python design patterns [closed]python设计模式[关闭]
【发布时间】:2010-10-11 00:34:53
【问题描述】:

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

【问题讨论】:

标签: python design-patterns


【解决方案1】:

Bruce Eckel 的 Thinking in Python 非常依赖设计模式

【讨论】:

【解决方案2】:

有些重叠

Intermediate and Advanced Software Carpentry in Python

Code Like a Pythonista: Idiomatic Python

Python Idioms and Efficiency

Google Developers Day US - Python Design Patterns

另一个资源是Python Recipes。很多人没有遵循最佳实践,但您可以在其中找到一些有用的模式

【讨论】:

  • 第三个链接失效了。试图找到镜像但找不到,如果有人有正确的链接请添加
  • 这里也一样,Python Idioms and Efficiency 似乎不起作用。
  • 第一个和第二个链接已经失效,所以我用 Internet 存档快照更新了它们。虽然它们似乎很旧,但我确信其中很多仍然相关。
【解决方案3】:

在调用可能存在或可能不存在的对象的属性时,您可以使用Null Object Design Pattern(我在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"

有了这个,如果你这样做Null("any", "params", "you", "want").attribute_that_doesnt_exists()它不会爆炸,而只是默默地变成pass的等价物。

通常你会做类似的事情

if obj.attr:
    obj.attr()

有了这个,你就可以:

obj.attr()

然后忘记它。请注意,大量使用 Null 对象可能会隐藏代码中的错误。

【讨论】:

    【解决方案4】:

    类型

    >>> import this
    

    在 Python 控制台中。

    虽然这通常被视为(很好!)笑话,但它包含几个有效的特定于 python 的公理。

    【讨论】:

      【解决方案5】:

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

      本文探讨了当使用动态、高阶、面向对象的编程语言解决类似问题时,通常称为“Gang of Four”或“GOF”一书中的模式如何出现。一些模式消失了——也就是说,它们被语言特性直接支持,一些模式更简单或有不同的侧重点,还有一些本质上没有变化。

      【讨论】:

      • 问题是关于 Python 的;这篇论文谈到了类似于 Scheme 的语言,据我所知,它是为这篇特定的论文现场发明的。除非提问者是 (a) 一位具有 (b) 长期 Python 实践经验的学术计算机科学家,否则我怀疑他们是否能从论文中得到任何有价值的东西——更重要的是,他们可能不会问这个问题首先。 :)
      【解决方案6】:

      您可以开始使用herehere

      要更深入地了解设计模式,您应该查看Design Patterns: Elements of Reusable Object-Oriented Software。源代码不在 Python 中,但您无需了解这些模式。

      【讨论】:

      • 我认为了解如何使用惯用的python实现设计模式很重要。它是一种与 GOF 中使用的 C++ 非常不同的语言,因此从 C++ 移植到 python 将导致非 pythonic 代码。
      • 我倾向于不同意。任何 OO 语言(无论是 Python、Java 还是 C++)都可以使用单例 DP 或其他 DP。在你看来,什么是非 Pythonic?
      • 第一个链接是一篇相当糟糕的论文,有很多关于 Python 的错误断言。第二个当前的 404,因此,我想,造成的伤害要小得多:)
      猜你喜欢
      • 2010-12-31
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多