いくつかの変数セットに対するクラス メソッドのアクションは、対応する非クラス関数のアクションとは異なると思われます。ここに例があります。一連の変数 A、B、C があり、いくつかのアルゴリズムに従って時間の経過とともにそれらを変更したいとします。2 つの可能な実装があります。
1) クラス:
class variables:
def __init__(self):
self.A = 0.0
self.B = 0.0
self.C = 0.0
def changeA(self):
self.A = some function of A, B and C
def changeB(self):
self.B = some function of A, B and C
def changeC(self):
self.C = some function of A, B and C
そして何度も呼び出します:
ob = variables()
i = 0
while i<N:
ob.changeA()
ob.changeB()
ob.changeC()
i = i + 1
2) 授業なし
A, B, C = 0.0, 0.0, 0.0
def changeA(A,B,C):
A = some function of A, B and C (same as in class method)
return A
def changeB(A,B,C):
B = some function of A, B and C (same as in class method)
return B
def changeC(A,B,C):
C = some function of A, B and C (same as in class method)
return C
そして何度も呼び出します:
i = 0
while i<N:
A = changeA(A,B,C)
B = changeB(A,B,C)
C = changeC(A,B,C)
i = i + 1
私の意見では、2 つのアプローチの結果は同じでなければなりません。唯一の違いは、変数 A、B、および C が既知である名前空間です (オブジェクト内のローカルまたは関数実装のグローバルのいずれか - ただし、どちらの場合も、メソッドは必要な変数にアクセスできます)。ただし、2 つの方法の結果は異なるようです。だから私の質問は、クラスメソッドの実装/理解に欠けているものはありますか?
具体的には、メソッド changeA の実装例:
クラスメソッドとして:
(... inside the class)
def changeA(self):
self.A = self.A + 2.0*self.B - 3.0*self.C*(self.B-self.A)
関数として:
def changeA(A,B,C):
A = A + 2.0*B - 3.0*C*(B-A)
return A