Pythonを使用したベストプラクティス、デザインパターン、SOLID原則の例を提供するリソースを探しています。
Pythonを使用したベストプラクティス、デザインパターン、SOLID原則の例を提供するリソースを探しています。
回答:
これらの一部が重複しています
Google Developers Day US-Pythonデザインパターン
別のリソースは、Pythonレシピの例です。適切な数はベストプラクティスに従っていませんが、役立つパターンがいくつかあります。
Bruce Eckelの「Thinking in Python」は、デザインパターンに大きく依存しています。
デザインパターンの詳細については、「デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素」を参照してください。ソースコードはPythonではありませんが、パターンを理解する必要はありません。
存在する場合と存在しない場合があるオブジェクトの属性を呼び出すときにコードを簡略化するために使用できるものの1つは、Nullオブジェクトデザインパターン(Pythonクックブックで紹介したもの)を使用することです。
大まかに言って、Nullオブジェクトの目的は、Pythonでよく使用されるプリミティブデータ型Noneまたは他の言語で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
オブジェクトを広範囲に使用すると、コード内のバグを隠す可能性があることに注意してください。
動的オブジェクト指向言語(つまりPython)のデザインパターンについて説明しているこの記事(.pdfファイルを選択)もご覧ください。ページを引用するには:
このペーパーでは、「Gang of Four」または「GOF」という本のパターンは、動的で高次のオブジェクト指向プログラミング言語を使用して同様の問題に対処したときに、よく呼ばれるように表示されます。一部のパターンは表示されなくなります。つまり、それらは言語機能によって直接サポートされ、一部のパターンはより単純であるか、別の焦点を持ち、一部は本質的に変更されていません。