在Python 中設定物件的屬性:了解限制
在Python 中,可以從物件類本身的實例上。這種差異提出了一個問題:為什麼禁止普通物件分配屬性?
物件實例中缺少字典
為了支援任意屬性分配,物件需要一個 dict 屬性,它充當可以儲存屬性的字典。然而,物件類別的實例並不擁有這樣的 dict__。在 Python 中為每個物件建立 __dict 會帶來巨大的記憶體開銷,因為所有物件都需要存在它,即使是那些不使用屬性的物件。
這可以使用 pympler 進行示範專案。大小測量表明,字典(可以保存屬性的物件)消耗 144 個字節,而整數(沒有屬性的物件)僅需要 16 個位元組。透過引入 __dict__,即使是簡單的物件的記憶體佔用也會大大增加。
繼承與屬性賦值
當建立一個繼承自物件類別的類別時,情況就會改變。 dict 屬性被加入到新類別的每個實例中,允許它具有任意屬性。然而,這種靈活性是有儲存成本的。
例如,建立繼承自 int 的名為 dint 的類別會導致實例佔用 184 位元組,明顯高於常規整數的 16 位元組。這種差異是由於附加的 dict 屬性造成的。
slots 替代方案
在實例只需要對於少量的特定屬性,Python 提供了 slots 特殊屬性。透過將 slots 定義為包含屬性名稱的字串序列,類別可以限制實例可以擁有的屬性集。這種機制可以防止創建 __dict__,從而節省記憶體。
例如,建立一個名為 fint 的類,該類別繼承自 int 並定義一個名為「foobar」的屬性槽,從而將實例的記憶體佔用量減少到 80 位元組。這仍然大於整數,但明顯小於具有 __dict__ 的類別。
結論
總之,Python 中的普通物件無法指派屬性,因為它們不具有 dict 屬性。這樣做主要是為了節省內存,因為每個物件都需要 dict,無論它是否需要屬性。然而,繼承的類別可以透過包含 dict 來擁有屬性,並且 slots 機制在需要有限數量的特定屬性時提供了有效的替代方案。
以上是為什麼不能在 Python 中為普通物件分配屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

SlicingaPythonlistisdoneusingthesyntaxlist[start:stop:step].Here'showitworks:1)Startistheindexofthefirstelementtoinclude.2)Stopistheindexofthefirstelementtoexclude.3)Stepistheincrementbetweenelements.It'susefulforextractingportionsoflistsandcanuseneg

numpyallowsforvariousoperationsonArrays:1)basicarithmeticlikeaddition,減法,乘法和division; 2)evationAperationssuchasmatrixmultiplication; 3)element-wiseOperations wiseOperationswithOutexpliitloops; 4)

Arresinpython,尤其是Throughnumpyandpandas,weessentialFordataAnalysis,offeringSpeedAndeffied.1)NumpyArseNable efflaysenable efficefliceHandlingAtaSetSetSetSetSetSetSetSetSetSetSetsetSetSetSetSetsopplexoperationslikemovingaverages.2)

列表sandnumpyArraysInpythonHavedIfferentMemoryfootprints:listSaremoreFlexibleButlessMemory-效率,而alenumpyArraySareSareOptimizedFornumericalData.1)listsStorReereReereReereReereFerenceStoObjects,with withOverHeadeBheadaroundAroundaround64byty64-bitsysysysysysysysysyssyssyssyssysssyssys2)

toensurepythonscriptsbehavecorrectlyacrycrosdevelvermations,分期和生產,USETHESTERTATE:1)Environment varriablesForsimplesettings,2)configurationfilesfilesForcomPlexSetups,3)dynamiCofforComplexSetups,dynamiqualloadingForaptaptibality.eachmethodoffersuniquebeneiquebeneqeniquebenefitsandrefitsandrequiresandrequiresandrequiresca

Python列表切片的基本語法是list[start:stop:step]。 1.start是包含的第一個元素索引,2.stop是排除的第一個元素索引,3.step決定元素之間的步長。切片不僅用於提取數據,還可以修改和反轉列表。

ListSoutPerformarRaysin:1)DynamicsizicsizingandFrequentInsertions/刪除,2)儲存的二聚體和3)MemoryFeliceFiceForceforseforsparsedata,butmayhaveslightperformancecostsinclentoperations。

toConvertapythonarraytoalist,usEthelist()constructororageneratorexpression.1)intimpthearraymoduleandcreateanArray.2)USELIST(ARR)或[XFORXINARR] to ConconverTittoalist,請考慮performorefformanceandmemoryfformanceandmemoryfformienceforlargedAtasetset。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

記事本++7.3.1
好用且免費的程式碼編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境