2017-03-02 157 views
1

我剛剛看了一下Python中的類和方法變量,我想知道是否有這兩個例子之間的差異:聲明類方法中的新變量

class Example(object): 
    def __init__(self, nr1, nr2): 
     self.a = nr1 
     self.b = nr2 

    def Add(self): 
     c = self.a + self.b 
     return c 

class Example2(object): 
    def __init__(self, nr1, nr2): 
     self.a = nr1 
     self.b = nr2 

    def Add(self): 
     self.c = self.a + self.b 
     return self.c 

基本上,如果我做的:

print Example(3,4).Add() 
print Example2(3,4).Add() 

我得到了相同的結果:

7 
7 

所以我的問題是:

  1. self.c = self.a + self.bc = self.a + self.b有什麼區別?
  2. 應該用self聲明聲明在類內聲明的所有新變量嗎?

感謝您的幫助!

+4

'self.c'是一個附加到該對象的變量,而'c'是一個**局部**變量。 –

+0

@WillemVanOnsem:那麼我可以在方法中聲明新的類實例變量? – Litwos

+0

那些不是**類變量**。這些是**對象變量**。是的,一個對象基本上是一個字典,你可以在方法中添加/修改/刪除這些項目。 –

回答

2

區別在於,在第二個示例中,您將添加的結果存儲到對象變量c中。在第一個例子中,c在一個方法中,因此不能是一個類變量,因爲它是在調用Add方法時實例化的,而不是在定義類時實例化的。

方法內部的變量應該用自己書寫,只要你想存儲它們。一個本地的,不重要的變量可以寫在一個方法中,就像你用c做的例子一樣。

-1

1.-您可以使用self.c其他方法c否,是局部變量。

2.-是的,與self.c

3.-否,如果您只在當前使用本地方法中需要它。

4.-內__init__或在上課的時候,它的確定。

0
class Example(object): 
    def __init__(self, nr1, nr2): 
     self.a = nr1 
     self.b = nr2 

    def Add(self): 
     c = self.a + self.b 
     return c 

假設我們創建了一個實例x = Example()。

如果我們嘗試使用x.c來獲得c。我們會得到以下錯誤

AttributeError:'Example'對象沒有屬性'c'。

+0

雖然你說的是正確的,但你沒有真正解釋爲什麼它會給出錯誤,或者爲什麼這會回答他的問題。爲了改進這個答案,請嘗試向OP解釋你的答案背後的原因和邏輯。你必須假設他們什麼都不知道,所以你從一個非常簡單的層面解釋它。 –