静的メソッドはいつどのように使用されると思われますか?私たちはすでに、ファクトリメソッドとしてクラスメソッドを使用して、可能な限りオブジェクトのインスタンスを作成しないようにしました。つまり、クラスメソッドを代替コンストラクタとして使用するのはベストプラクティスではありません(Factory method for python object - best practiceを参照)。Pythonでの静的メソッドの使用 - ベストプラクティス
データベース内のエンティティデータを表すために使用されるクラスがあるとします。データがフィールド名とフィールド値を含むdict
オブジェクトであり、フィールドの1つがデータを一意にするID番号であるとします。ここで
class Entity(object):
def __init__(self, data, db_connection):
self._data = data
self._db_connection
私__init__
方法は、エンティティデータdict
オブジェクトを受け取ります。私はID番号のみを持っており、Entity
インスタンスを作成したいとします。最初に残りのデータを見つけて、Entity
オブジェクトのインスタンスを作成する必要があります。私の以前の質問から、ファクトリメソッドとしてのクラスメソッドの使用は、おそらく避けなければならないことを立証しました。
上記は、何もしないか、または少なくとも代替手段がない場合はどうしたらよいかの例です。今私はそれがユーティリティメソッドのより多くのファクトリメソッドの有効な解決策であるように私のクラスメソッドを編集するかどうか疑問に思っています。つまり、次の例は、静的メソッドを使用するためのベストプラクティスに準拠していますか。
class Entity(object):
@staticmethod
def data_from_id(id_number, db_connection):
filters = [['id', 'is', id_number]]
data = db_connection.find(filters)
return data
# Create entity
data = Entity.data_from_id(id_number, db_connection)
entity = Entity(data)
また、スタンドアロン機能を使用してID番号からエンティティデータを見つける方が理にかなっていますか?
def find_data_from_id(id_number, db_connection):
filters = [['id', 'is', id_number]]
data = db_connection.find(filters)
return data
# Create entity.
data = find_data_from_id(id_number, db_connection)
entity = Entity(data, db_connection)
注:私は__init__
メソッドを変更したくありません。以前は人々が私の__init__
メソッドをこのようなものにすることを提案していましたが、エンティティデータを見つけるための101の異なる方法があるので、ある程度論理を分離しておくことを好むでしょう。理にかなっている?
この質問の名前と導入文は、必要なコードを書く正しい方法を見つけようとするのではなく、言語機能を使用する理由から掘り下げているように思えます。私はそれがあなたが何をしているのかを言っているわけではありません。あなたの質問の実際のボディは、実際には有効な質問です。ちょうどあなたの言い回しについて少し考えてください。このようにして、良いPythonを書く人々のはるかに大きなプールではなく、言語機能を議論したい人からの回答しか得られないかもしれません。 – abarnert