web-dev-qa-db-ja.com

pythonデザインパターン

Pythonを使用したベストプラクティス、設計パターン、およびSOLID原則の例を提供するリソースを探しています。

164
Ted Smith

これらのいくつかの重複

Pythonの中間および高度なソフトウェア大工仕事

Pythonistaのようなコード:慣用的なPython

Pythonのイディオムと効率

Google Developers Day US-Pythonデザインパターン

別のリソースは Python Recipes の例です。良い数字はベストプラクティスに従っていませんが、役に立つパターンを見つけることができます

151
Ed.

タイプ

>>> import this

Pythonコンソールで。

これは通常(素晴らしい!)ジョークとして扱われますが、有効なpython固有の公理がいくつか含まれています。

24
Anonymous

ブルースエッケルの「 Thinking in Python 」は、デザインパターンに大きく依存しています。

13
leancz

始めることができます here および here

設計パターンの詳細については、 設計パターン:再利用可能なオブジェクト指向ソフトウェアの要素 を参照してください。ソースコードはPythonではありませんが、パターンを理解する必要はありません。

6
Brian R. Bondy

存在する場合と存在しない場合があるオブジェクトの属性を呼び出すときにコードを簡略化するために使用できるものは、 Null Object Design Pattern (これは Python Cookbook )。

大まかに言うと、Nullオブジェクトの目標は、よく使用されるプリミティブデータ型NoneのPythonまたは他の言語のNull(またはNullポインター)を「インテリジェント」に置き換えることです。これらは、他の点では同様の要素のグループのメンバーの1つが何らかの理由で特別であるという重要なケースを含む、多くの目的に使用されます。ほとんどの場合、これにより、通常の要素とプリミティブな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オブジェクトを広範囲に使用すると、コード内のバグを潜在的に隠すことができることに注意してください。

5
Esteban Küber

また、これを読むこともできます article (.pdfファイルを選択)、動的オブジェクト指向言語(Pythonなど)のデザインパターンについて説明します。ページを引用するには:

このペーパーでは、動的で高次のオブジェクト指向プログラミング言語を使用して同様の問題に対処する場合に、「ギャングオブフォー」または「GOF」ブックのパターンがどのように表示されるかを調べます。一部のパターンは消えます。つまり、言語機能によって直接サポートされます。一部のパターンはより単純であるか、異なる焦点を持ち、一部は本質的に変更されていません。

3
Gilad Naor