私はしばらくの間 Python でプログラミングしており、Python スタイルの知識をカバーしましたが、クラスを適切に使用する方法についてはまだ問題があります。オブジェクト指向の講義を読んでいると、Single Responsibility Principle のようなルールをよく見かけます。
「単一責任の原則は、クラスには変更する理由が 1 つだけあるべきだと言っています。」
これを読むと、次のように 1 つのクラスを 2 つに分割することを考えるかもしれません。
class ComplicatedOperations(object):
def __init__(self, item):
pass
def do(self):
...
## lots of other functions
class CreateOption(object):
def __init__(self, simple_list):
self.simple_list = simple_list
def to_options(self):
operated_data = self.transform_data(self.simple_list)
return self.default_option() + operated_data
def default_option(self):
return [('', '')]
def transform_data(self, simple_list):
return [self.make_complicated_operations_that_requires_losts_of_manipulation(item)
for item in simple_list]
def make_complicated_operations_that_requires_losts_of_manipulation(self, item):
return ComplicatedOperations(item).do()
これは、私にとって、さまざまな疑問を投げかけます。お気に入り:
- クラス変数を使用したり、クラス関数で引数を渡す必要があるのはいつですか?
ComplicatedOperations
クラスはクラスであるべきか、それとも単なる関数の集まりであるべきか?__init__
メソッドを使用して最終結果を計算する必要があります。それはそのクラスをテストするのを難しくしますか。- Pythonists のルールは何ですか?
回答後に編集:
したがって、アウグスト理論を読むと、次のようになります。
class ComplicatedOperations(object):
def __init__(self):
pass
def do(self, item):
...
## lots of other functions
def default_option():
return [('', '')]
def complicate_data(item):
return ComplicatedOperations().do(item)
def transform_data_to_options(simple_list):
return default_option() + [self.complicate_data(item)
for item in simple_list]
(また、default_option の小さなバグを修正しました。)