引述diveintopython的,類和數據屬性有什麼區別?
「你已經知道了數據屬性,它們是由 類的具體實例所擁有的變量。Python也支持類屬性, 它們是由類本身所擁有的。」
從某種意義上講,類是屬於某個類的?如果您在特定實例中更改類屬性的值,則該更改僅反映在該實例中(而不是在該類的其他實例中)。
從我的觀點來看,這使得類屬性與數據(即實例)屬性基本相同(儘管存在語法差異)。
在C++中更改「類變量」的值,並且該更改反映在所有實例中。
兩者有什麼區別?
引述diveintopython的,類和數據屬性有什麼區別?
「你已經知道了數據屬性,它們是由 類的具體實例所擁有的變量。Python也支持類屬性, 它們是由類本身所擁有的。」
從某種意義上講,類是屬於某個類的?如果您在特定實例中更改類屬性的值,則該更改僅反映在該實例中(而不是在該類的其他實例中)。
從我的觀點來看,這使得類屬性與數據(即實例)屬性基本相同(儘管存在語法差異)。
在C++中更改「類變量」的值,並且該更改反映在所有實例中。
兩者有什麼區別?
我認爲這個例子會解釋你的意思。
class A(object):
bar = 1
a = A()
b = A()
b.bar = 2
print a.bar # outputs 1
A.bar = 3
print a.bar # outputs 3
print b.bar # outputs 2
在這種情況下b.bar
將由例如b.bar = 2
但a.bar
仍將由類所擁有後所擁有。這就是爲什麼在課堂上改變它後它會被改變,b.bar
不會。
OP詢問爲什麼類屬性和數據屬性之間存在*區分*,因爲它們似乎執行相同的任務。 – Blender 2011-12-20 07:45:47
OK ...所以它是一個文字類變量,但只適用於自己沒有修改它的實例。如果一個類變量被修改爲特定的實例,它立即開始行爲像一個實例屬性。不明白這個的目的。 – Mark 2011-12-20 07:46:57
這根本不是「靜態的」。傳統上,類變量應該在所有實例中都是靜態的,因此可以在任何地方進行更改,並且該更改會反映在所有實例中。 python類屬性的這種行爲是微妙而奇怪的(而且看起來毫無意義)。 – Mark 2011-12-20 07:51:58
攪拌機 - 看起來像你有時間完全重寫我的文章,以取消邊緣,但仍然無法回答它。謝謝? (僅供參考 - 你寫過這個標題的方式,它會被標記爲重複,儘管根據我的理解,這個問題還沒有被回答。) – Mark 2011-12-20 07:40:24
你是什麼意思的「邊緣」?我清理了你的問題,因爲你剛剛開始一個偶然的討論,並沒有問任何具體的問題。如果你不喜歡我的編輯,請回滾到原始狀態。這已被回答[相當多次](http://stackoverflow.com/questions/207000/python-difference-between-class-and-instance-attributes)。 – Blender 2011-12-20 07:43:25
Blender的編輯是一個很大的改進。 – wim 2011-12-20 07:43:59