我們說classes
在Python中是可變的,這意味着您可以使用引用來更改將在對象中反映的值。例如,爲什麼我不能在Python中更改類的屬性
>>> A = [1, 2, 3]
>>> B = A
>>> B[2] = 5
>>> A
[1, 2, 5]
在這裏,我可以更改使用B
A
對象的值,因爲list
是一個可變的類型。我的問題是,爲什麼我不能改變使用以下相同的概念類的屬性:
class C:
apple = 2
def __init__(self):
self.dangerous = 2
D = C# D is pointing to same class C
D().dangerous = 5 # changing the value of class attribute D
D().apple = 3 # changing the value of apple here
print D().apple
print D().dangerous
OUTPUT:
2
2
任何人都可以解釋爲什麼輸出2
和2
但不3
和5
,因爲我們都在講類是mutable
類型。
UPDATE:通過@ zxq9參考答案,如果你看到下面的圖做D=C
時,D
實際上是指向同一類,而一個新的對象,你所描述。你能解釋這一點:
在世界上有什麼人downvoting用的? OP問了一個非常明確的問題,就是沒有意識到實例化對象和類定義之間的語法差異。 – zxq9
@ zxq9你能看到我更新的圖片嗎? – python
是的,但*你仍然只分配給類的臨時實例*而不是類本身。我會玩弄這個,並擴大我的答案以覆蓋這一點。用Python來記住它是一件非常好的事情。 – zxq9