2011-04-14 54 views
1

我很難掌握類中某個方法的變量,我想知道是否有人能解釋這些「工作」是如何幫助我更好地理解它的。Python中面向對象編程的基本問題

例如:

Time類

def __init__(self, hour,minute, second) 
    self.hour = hour 
    self.minute = minute 
    self.second = second 

def print_time(self): 
    print '%.2d:%.2d:%.2d' % (self.hour, self.minute, self.second) 

time = Time(h,m,s) 
time.print_time() 

內哪裏發生在 '自我' 變量的變化?爲什麼不調用這個方法(看起來更直接):方法(var1(subject),var2,var3,var4)?而不是subject.method(var2,var3,var4)? (我知道我對此的理解充其量,所以請糾正我,如果我的任何條款也不正確)。

另一個例子也是非常有用的。謝謝。

+0

此錯誤代碼是錯誤的。例如。 'self.x = hour' - 在可用範圍內沒有'hour'。什麼是'print_time'?班級定義在哪裏? – detly 2011-04-14 02:48:56

+0

好 - 我更新了代碼。這個例子摘自「如何像計算機科學家一樣思考」(下面的鏈接)。 – David542 2011-04-14 02:53:29

回答

4
  1. 魔法。準確地說,Python專用的魔術;其他語言可能(並且經常)選擇以不同的方式進行。

  2. 它可以。在Python中,Class.method(obj)obj.method()相同,當objClass的實例時。儘管如此,__init__()是一個特例。

+2

我會說「魔法」發生在其他語言中,其中像「this」這樣的詞神奇地指向當前實例(有時「this」甚至魔術般地添加到它所適合的字段中)。 – 2011-04-14 03:01:03

0

你從哪裏得到這個奇怪的代碼?它沒有任何意義。

您應該看看「How To Think Like a Computer Scientist」,它的代碼示例與您發佈的內容類似,只是它是正確的,並且它解釋了變量範圍。查看上述URL的第15.6節。

+0

它是從那裏複製並粘貼的,我只是更改了__init__中的變量。唯一的是,我沒有包含print_time()方法。 – David542 2011-04-14 02:43:05

+1

你不能只改變那樣的變量。基本上,來自web的代碼接受三個作爲__init__函數參數的值,並將它們複製到對象實例的三個屬性中。這取決於在等號右側使用的參數名稱。左側名稱可以是任何東西。 – 2011-04-14 02:46:14