3 回答

TA貢獻1757條經驗 獲得超8個贊
如果你只有一個實例,那么最好每個實例創建所有變量,只是因為它們會被訪問(一點點)更快(由于從類到實例的“繼承”,一個更少的“查找”級別),并且沒有任何缺點可以衡量這個小優勢。

TA貢獻1752條經驗 獲得超4個贊
進一步回應邁克和亞歷克斯的建議并添加我自己的顏色......
使用實例屬性是典型的,更慣用的Python。類屬性不常使用 - 至少在我連續13年的Python中沒有生產代碼。對于靜態和類方法也是如此...除非有特定的用例或異常的程序員想要炫耀他們知道Python編程的一些不起眼的角落,否則不是很常見。
alex在他的回復中提到,由于一個較少的查找級別,訪問速度會快一點點...讓我進一步澄清那些不知道它是如何工作的人,它與變量訪問非常相似 - - 按此順序搜索:
當地人
nonlocals
全局
內置插件
對于屬性訪問,順序是:
例
類
由MRO確定的基類(方法解析順序)
在上面的示例中,假設您正在查找path
屬性。當遇到像“ self.path
” 這樣的引用時,Python會首先查看實例屬性以獲得匹配; 當失敗時,它會檢查從中實例化對象的類。最后,它將搜索基類。正如亞歷克斯所說,如果在實例中找到你的屬性,它就不會順從類,因此節省了一點時間。
但是,如果你堅持使用類屬性,你將不得不放棄這一點性能,或者,你的另一種選擇是通過類而不是實例引用對象,例如,MyController.path
而不是self.path
。這是一個直接查找,它將繞過延遲查找,但正如alex提到的那樣,這是一個全局變量,所以你會丟失那個你認為要保存的位(除非你創建一個對[global]類名的本地引用)。

TA貢獻1810條經驗 獲得超4個贊
如有疑問,您可能需要實例屬性。
類屬性最好保留用于有意義的特殊情況。唯一非常常見的用例是方法。對于實例需要知道的只讀常量,使用類屬性并不罕見(盡管這樣做的唯一好處就是如果你也希望從類外部進行訪問),但你應該謹慎地將任何狀態存儲在它們中,這很少是你想要的。即使您只有一個實例,也應該像編寫其他任何實例一樣編寫類,這通常意味著使用實例屬性。
添加回答
舉報