Pythonで静的メソッドが使用されるのはいつ、どのように想定されていますか? クラスメソッドをファクトリメソッドとして使用してオブジェクトのインスタンスを作成することは、可能な限り避けるべきであることをすでに確立しました。つまり、クラス メソッドを代替コンストラクタとして使用することはベスト プラクティスではありません ( Python オブジェクトのファクトリ メソッド - ベスト プラクティス を参照)。
データベース内のエンティティ データを表すために使用されるクラスがあるとします。データがdict
フィールド名とフィールド値を含むオブジェクトであり、フィールドの 1 つがデータを一意にする ID 番号であるとします。
class Entity(object):
def __init__(self, data, db_connection):
self._data = data
self._db_connection
ここで、__init__
メソッドはエンティティ データdict
オブジェクトを受け取ります。Entity
ID 番号しか持っていないので、インスタンスを作成したいとします。まず、残りのデータを見つけてから、Entity
オブジェクトのインスタンスを作成する必要があります。以前の質問から、クラス メソッドをファクトリ メソッドとして使用することは、可能な限り避けるべきであることがわかりました。
class Entity(object):
@classmethod
def from_id(cls, id_number, db_connection):
filters = [['id', 'is', id_number]]
data = db_connection.find(filters)
return cls(data, db_connection)
def __init__(self, data, db_connection):
self._data = data
self._db_connection
# Create entity
entity = Entity.from_id(id_number, db_connection)
上記は、してはいけないこと、または代替手段がある場合に少なくともしてはいけないことの例です。クラスメソッドを編集して、ユーティリティメソッドに近づけ、ファクトリメソッドを減らすことが有効な解決策であるかどうか疑問に思っています。つまり、次の例は、静的メソッドを使用するためのベスト プラクティスに準拠していますか。
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__
メソッドを次のようにすることを提案して__init__(self, data=None, id_number=None)
いましたが、エンティティ データを見つけるには 101 通りの方法がある可能性があるため、そのロジックをある程度分けておくことをお勧めします。わかる?