在 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,withoverHeadeBheadaroundAroundaroundaround64bytaround64bitson64-bitsysysysyssyssyssyssyssyssysssys2)

toensurepythonscriptsbehavecorrectlyacrycrossdevelvermations,登台和生产,USETHESTERTATE:1)Environment varriablesforsimplesettings,2)configurationFilesForefilesForcomPlexSetups,3)dynamiCofforAdaptapity.eachmethodofferSuniquebeneiquebeneiquebeneniqueBenefitsaniqueBenefitsandrefitsandRequiresandRequireSandRequireSca

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
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

WebStorm Mac版
好用的JavaScript开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。