私はPythonには比較的新しいので、C++やJavaのバックグラウンドから習得した習慣と言語の機能を調和させるのに苦労しています。非会員vs Pythonのメンバー関数
私がいる最新号は、カプセル化して最高のマイヤーの「効果的なC++」の項目23でまとめ、具体的なアイデアを行うことがあります。
Prefer non-member non-friend functions to member functions。しばらく
friend
機構の欠如を無視
、を非メンバ関数も、Pythonのにメンバ関数に好ましいと考えていますか?
義務、愚か例:v = Vector(10, 20)
考える
class Vector(object):
def __init__(self, dX, dY):
self.dX = dX
self.dY = dY
def __str__(self):
return "->(" + str(self.dX) + ", " + str(self.dY) + ")"
def scale(self, scalar):
self.dX *= scalar
self.dY *= scalar
def scale(vector, scalar):
vector.dX *= scalar
vector.dY *= scalar
、我々は今、どちらかのベクトルの大きさを倍増させるv.scale(2)
またはscale(v, 2)
を呼び出すことができます。優れている、と理由 - があれば -
私たちは、この場合にプロパティを使用しているという事実は、二つの選択肢のを考えると?
これは単にPythonでは当てはまりません。引数は実際にはPythonで座っていないので、クラスを簡単に変更できます。 Pythonは読みやすさにも焦点を当てています。私は '' v.scale(2) ''が '' scale(v、2) ''よりもはるかに明確であると感じています。標準ライブラリを見ると、最も一般的な関数を除くすべての関数は、組み込み関数ではなくメンバとして保持されます。 –