私は Python に比較的慣れていないので、言語の機能と、C++ と Java のバックグラウンドから身につけた習慣をうまく調和させるのに苦労しています。
私が抱えている最新の問題は、カプセル化に関係しています。具体的には、Meyer の「Effective C++」の項目 23 によって最もよく要約されているアイデアです。
メカニズムの欠如をfriend
少し無視して、非メンバー関数は Python のメンバー関数よりも好ましいと見なされますか?
義務的で愚かな例:
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
が与えられると、ベクトルの大きさを 2 倍にするまたはをv = Vector(10, 20)
呼び出すことができます。v.scale(2)
scale(v, 2)
この場合にプロパティを使用しているという事実を考慮して、2 つのオプションのどちらが優れているか (もしあれば)、そしてその理由は?