我懷疑類方法對某些變量集的操作與相應的非類函數的操作不同。這是一個例子。假設我們有一組變量:A,B,C,並且我們希望根據一些算法隨時間對它們進行修改。有2種可能的實現方式:與非類函數不同的python類方法
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
並調用很多次:
3210在我看來,2種方法的結果必須相同。唯一的區別是變量A,B和C已知的名稱空間(對象本地或全局函數實現 - 但在這兩種情況下,方法都可以訪問所需的變量)。但是,兩種方法的結果似乎有所不同。所以我的問題是在類方法實現/理解中缺少什麼?
具體而言,實施方法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
你有沒有想過用'self.'在課堂上每次使用A,B和C的前綴?否則,您將訪問全局名稱而不是本地名稱。 –
是什麼讓你覺得這些行爲有所不同?你能發佈一些顯示差異的特定(工作)代碼嗎? – lvc
在這兩個示例中,您都沒有定義類變量。在例子(1)中,你有一個具有三個實例屬性(變量)的實例。 – msw