栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么不能在python中向对象添加属性?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么不能在python中向对象添加属性?

请注意,

object
实例没有
__dict__
属性:

>>> dir(object())['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__']

一个在派生类中说明此行为的示例:

>>> class Foo(object):...     __slots__ = {}...>>> f = Foo()>>> f.bar = 42Traceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: 'Foo' object has no attribute 'bar'

引用以下文档

slots

[…]

__slots__
声明采用一系列实例变量,并在每个实例中仅保留足够的空间来为每个变量保存一个值。因为
__dict__
未为每个实例创建空间,所以节省了空间。

编辑:要从评论中回答ThomasH,OP的测试类是“旧式”类。尝试:

>>> class test: pass...>>> getattr(test(), '__dict__'){}>>> getattr(object(), '__dict__')Traceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: 'object' object has no attribute '__dict__'

您会注意到有一个

__dict__
实例。对象类可能没有
__slots__
定义,但是结果是相同的:缺少
__dict__
,这是阻止属性动态分配的原因。我重新整理了答案,以使这一点更清楚(将第二段移到顶部)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610351.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号