2017-04-15 58 views
0

我一直在考慮這兩個類定義:誤解了類和定義

class Weird(object): 
    def __init__(self, x, y): 
     self.y = y 
     self.x = x 
    def getX(self): 
     return x 
    def getY(self): 
     return y 

class Wild(object): 
    def __init__(self, x, y): 
     self.y = y 
     self.x = x 
    def getX(self): 
     return self.x 
    def getY(self): 
     return self.y 

X = 7 
Y = 8 

前兩個問題都很好;他們只是問

w2 = Wild(X, Y) 
print(w2.getX()) 

(也就是7)和

print(w2.getY())

什麼讓我困惑的問題

w1 = Weird(X, Y) 
print(w1.getX()) 

print(w1.getY())

他們的答案顯然都是「錯誤」,但我不明白爲什麼會出現這種情況。給出的錯誤分別是「x未定義」和「y未定義」,但我認爲xy是我們放入函數的參數。我錯過了什麼?

+0

你寫了'return x',而不是'return self.x'。 –

+0

'x'和'y'是'Weird .__ init__'中的本地人。這意味着它們不存在該函數的外部*。 'Weird.getX'和'Weird.getY'是具有獨立名稱空間的獨立函數。 –

+0

'x'和'self.x'有什麼區別? – alexqwx

回答

0

在您的第一堂課中,xy是構造函數參數。 他們無法在此範圍之外訪問。

getX函數中,x不存在。您需要從self參考中檢索它,例如在第二堂課中。