「より良い」練習はどれですか? Pythonでオブジェクト参照またはオブジェクトメソッド参照を渡す
-
09-10-2019 - |
質問
私はPythonで小さなコードを書いていますが、他の人がこれについてどう思うか興味があります。
いくつかのクラスがあり、それぞれにいくつかのメソッドがあり、「より良い」ものを決定しようとしています。メソッド呼び出しでオブジェクトを渡すか、オブジェクトから1つのメソッドのみが必要な場合はメソッド呼び出しを通過します。基本的に、私はこれを行うべきです:
def do_something(self, x, y, manipulator):
self.my_value = manipulator.process(x, y)
またはこれ
def do_the_same_thing_but_differently(self, x, y, manipulation):
self.my_value = manipulation(x, y)
私が見る方法では、2番目は間違いなく「より良い」です。なぜなら、それは操作と他のクラスの間の緩い結合/より強い結束を促進するからです。オブジェクトから単一のメソッドのみが必要な場合、このアプローチに対するいくつかの議論を見たいと思っています。
編集: それは明らかに動揺していたので、私はOOPの言葉遣いを削除しました。私は主にゆるい結合と高い結束について言及していました。
解決
2番目のソリューションは、より「機能的」であり、「OOP」ではなく、より「機能的」であるため、より緩い結合を提供する場合があります。最初のソリューションには、閉鎖を持たないC ++のような言語で機能するという利点があります(ただし、テンプレートとメンバーと対戦のポインタを使用して同様の効果を得ることができます)。しかし、Pythonのような言語では、2番目の代替案はより「自然」になっているようです。
編集:無料の本「Highdory Perl」に「機能とオブジェクト指向の」テクニックに関する非常に素晴らしい議論があります。
(第1章、パート6をご覧ください)。それはPerl(およびPythonではなく)の本ですが、そこでの議論はここで尋ねられた質問に正確に適合し、そこに記載されている機能的手法は同様の方法でPythonに適用できます。