Pythonを使用したベストプラクティス、設計パターン、およびSOLID原則の例を提供するリソースを探しています。
これらのいくつかの重複
Google Developers Day US-Pythonデザインパターン
別のリソースは Python Recipes の例です。良い数字はベストプラクティスに従っていませんが、役に立つパターンを見つけることができます
タイプ
>>> import this
Pythonコンソールで。
これは通常(素晴らしい!)ジョークとして扱われますが、有効なpython固有の公理がいくつか含まれています。
ブルースエッケルの「 Thinking in Python 」は、デザインパターンに大きく依存しています。
設計パターンの詳細については、 設計パターン:再利用可能なオブジェクト指向ソフトウェアの要素 を参照してください。ソースコードはPythonではありませんが、パターンを理解する必要はありません。
存在する場合と存在しない場合があるオブジェクトの属性を呼び出すときにコードを簡略化するために使用できるものは、 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
オブジェクトを広範囲に使用すると、コード内のバグを潜在的に隠すことができることに注意してください。
また、これを読むこともできます article (.pdfファイルを選択)、動的オブジェクト指向言語(Pythonなど)のデザインパターンについて説明します。ページを引用するには:
このペーパーでは、動的で高次のオブジェクト指向プログラミング言語を使用して同様の問題に対処する場合に、「ギャングオブフォー」または「GOF」ブックのパターンがどのように表示されるかを調べます。一部のパターンは消えます。つまり、言語機能によって直接サポートされます。一部のパターンはより単純であるか、異なる焦点を持ち、一部は本質的に変更されていません。