2015-10-25 196 views
-1

我有以下類,它有兩個類變量「值」和「漸變」。我將兩個值分配給類變量,然後將其打印出來。但是,我將20賦給一個不存在的類變量(「限制」)。但編譯器很高興,似乎存儲變量。這怎麼可能? 我的假設是,如果變量名稱不正確,我應該看到一條錯誤消息。我不應該嗎?爲類變量賦值python

class wire: 
    def __init__(self,value,gradient): 
     self.value  = value 
     self.gradient = gradient 

XX = wire(10,0.05) 
print XX.value , XX.gradient 

XX.limit = 20 
print XX.value , XX.gradient, XX.limit 

感謝您的幫助

+1

您正在分配*實例*屬性,而不是類屬性。不,Python不會限制這一點,這是完全正常的行爲。 –

+0

這是非法的任何其他面嚮對象語言或我夢想? – spgt

+1

不要將打字模型與編程範例混淆。 C++和Java可能會使其非法,但其他語言不會。 Python是一種[動態語言](https://en.wikipedia.org/wiki/Dynamic_programming_language),您在這裏想到靜態語言。 –

回答

0

這些實例變量,而不是類變量。

但我不知道你爲什麼期望出現錯誤。在__init__或其他地方定義這些屬性沒有區別。無論哪種方式,您都要向該實例添加新的屬性。

+0

嗨,丹尼爾,感謝您的澄清,我們可以在任何其他OO語言中做同樣的事情嗎?或者是這個python的東西?我沒有很多OO語言的經驗 – spgt

+0

正如Martijn所說,這很大程度上取決於語言。 Java是靜態類型的,所以包含類的所有變量都需要首先聲明。除非你定義了訪問器,否則Ruby會阻止所有對類外部屬性的訪問,但是你可以在類中任何你喜歡的地方定義它們,而不僅僅是在初始化器中。等等。 –