2015-08-29 65 views
0

今天我在訪問中被問到一個問題:「如果我們在類之外定義實例變量,它會顯示任何錯誤」。在類之外定義實例變量

class temp(): 
    a=0 
    b=0 
    def __init__(self,*args): 
     temp.a = args[0] 
     temp.b = args[1] 
     if len(args)>2 and args[2]: 
      print 'extra',args[2] 

    def display(self): 
     print self.a,self.b,self.c 

a = temp(4,9) 
b = temp(5,3) 
a.c = 20 
a.display() 

如果我上面的代碼運行,我得到的C值= 20。我從C++背景來了,認爲這將是錯誤,但不是......爲什麼是這樣的...爲什麼蟒蛇允許創建變量課外。

+0

因爲您還沒有采取任何措施來阻止這樣做。 –

+0

@ IgnacioVazquez-Abrams你能解釋一下嗎? – Naresh

+0

FWIW,有一個簡單的例子,在官方的Python類教程中爲現有的類實例添加屬性[Odds and Ends](https://docs.python.org/3/tutorial/classes.html#odds-and-ends ) –

回答

2

我推薦閱讀Classes and Namespaces上的Python文檔。在Python中,實例只是另一種類型的名稱空間,在類定義之外定義一個實例變量只涉及在定義實例的名稱和值字典中添加條目。將其與C進行對比,其中實例是根據類定義中規定的模式構建的實際內存塊。一旦定義了類,就不能在事實之後插入屬性。

0

在你的情況下,a是類temp的一個實例。您可以添加任何屬性。在源代碼中,您可以自己檢查它,它會通過簡單的指針操作將此屬性添加到此實例。 我認爲這是動態語言的關鍵點,它與C++非常不同。