为什么Python中的对象不能添加属性? [复制]

2023-11-26

(用Python shell编写)

>>> o = object()
>>> o.test = 1

Traceback (most recent call last):
  File "<pyshell#45>", line 1, in <module>
    o.test = 1
AttributeError: 'object' object has no attribute 'test'
>>> class test1:
    pass

>>> t = test1()
>>> t.test

Traceback (most recent call last):
  File "<pyshell#50>", line 1, in <module>
    t.test
AttributeError: test1 instance has no attribute 'test'
>>> t.test = 1
>>> t.test
1
>>> class test2(object):
    pass

>>> t = test2()
>>> t.test = 1
>>> t.test
1
>>> 

为什么对象不允许您向其添加属性?


请注意,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 = 42
Traceback (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__,这就是阻止属性动态分配的原因。我重新组织了我的答案以使这一点更清楚(将第二段移至顶部)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Python中的对象不能添加属性? [复制] 的相关文章

  • 如何查找 pandas 数据框中连续相同字符串值的计数?

    假设我们有以下 pandas 数据框 df pd DataFrame col1 A gt G C gt T C gt T G gt T C gt T A gt G A gt G A gt G col2 TCT ACA TCA TCA GCT
  • 在 python + openCV 中使用网络摄像头的问题

    我正在使用以下代码使用 openCV python 访问我的网络摄像头 import cv cv NamedWindow webcam feed cv CV WINDOW AUTOSIZE cam cv CaptureFromCAM 1 然
  • 关于使用Python启动SSH隧道的问题

    我在从用 Python 编写的 HTTP RPC 服务器启动 SSH 隧道时遇到了麻烦 基于Python的BaseHTTPServer 有一个用Python编写的简单的HTTP RPC服务器 作为其中一项服务的一部分 我想启动从 RPC 服
  • 修改对象实例的 TypeScript 类装饰器

    我正在为 Aurelia 制作一个插件 需要一个类装饰器 将属性添加到新对象实例 并且 使用新对象作为参数调用外部函数 我已经查看了示例 到目前为止我已经将它们放在一起 伪 代码 return function addAndCall tar
  • 更改 Inkscape 的 Python 解释器

    在使用 Inkscape 时 我不断收到错误 这似乎意味着未满足 python 2 vs 3 的期望 尽管我已经安装了它们 例如 当我尝试从模板生成新文档时 我得到 Traceback most recent call last File
  • Python中#和"""注释的区别

    开始用 Python 编程 我看到一些带有注释的脚本 and comments 这两种评论方式有什么区别 最好的事情就是阅读PEP 8 Python 代码风格指南 https www python org dev peps pep 0008
  • 同情因子简单关系

    我在 sympy 中有一个简单的因式分解问题 无法解决 我在 sympy 处理相当复杂的积分方面取得了巨大成功 但我对一些简单的事情感到困惑 如何得到 phi 2 2 phi phi 0 phi 0 2 8 因式分解 phi phi 0 2
  • 用于打印 C/C++ 文件的所有函数定义的 Python 脚本

    我想要一个 python 脚本来打印 C C 文件中定义的所有函数的列表 e g abc c定义两个函数为 void func1 int func2 int i printf d i return 1 我只想搜索文件 abc c 并打印其中
  • 打印一个 Jupyter 单元中定义的所有变量

    有没有一种更简单的方法来以漂亮的方式显示单个单元格中定义的所有变量的名称和值 我现在做的方式是这样的 但是当有30个或更多变量时我浪费了很多时间 您可以使用whos http ipython readthedocs io en stable
  • 出现意外的关键字参数“timeout”(Python 中的 google-cloud-storage)

    使用 google cloud storage 的 Python 项目在本地运行良好 但是当它从 App Engine 运行时 会显示错误 Traceback most recent call last File opt python3 7
  • 如何在Python中获取绝对文件路径

    给定一条路径 例如 mydir myfile txt 如何在Python中找到文件的绝对路径 例如 在 Windows 上 我最终可能会得到 C example cwd mydir myfile txt gt gt gt import os
  • 指定 Parquet 属性 pyspark

    如何在 PySpark 中指定 Parquet 块大小和页面大小 我到处搜索 但找不到任何有关函数调用或导入库的文档 根据火花用户档案 https mail archives apache org mod mbox spark user 2
  • Scrapy - 不会爬行

    我正在尝试运行递归爬行 由于我编写的爬行不能正常工作 因此我从网络上提取了一个示例并进行了尝试 我真的不知道问题出在哪里 但是爬行没有显示任何错误 谁能帮我这个 另外 是否有任何逐步调试工具可以帮助理解蜘蛛的爬行流程 非常感谢任何与此相关的
  • 写入 UDP 套接字会被阻塞吗?

    如果是的话 在什么条件下 或者 换句话说 在twisted 中运行此代码是否安全 class StatsdClient AbstractStatsdClient def init self host port super StatsdCli
  • Pandas - 分割大的Excel文件

    我有一个大约有 500 000 行的 Excel 文件 我想将其拆分为多个 Excel 文件 每个文件有 50 000 行 我想用熊猫来做 这样它会是最快和最简单的 有什么想法如何制作吗 感谢您的帮助 假设您的 Excel 文件只有一个 第
  • 对 pandas 数据框中的每一列应用函数

    我如何以更多的熊猫方式编写以下函数 def calculate df columns mean self df means for column in df columns columns tolist cleaned data self
  • 升级后 pip 损坏

    我做了 pip install U easyinstall 然后 pip install U pip 来升级我的 pip 但是 当我尝试使用 pip 时 我现在收到此错误 root d8fb98fc3a66 which pip usr lo
  • python IDLE shell 似乎无法正确处理一些转义

    例如 b 退格键打印为四元 在下面的示例中显示为 但是 n 换行是可以的 gt gt gt print abc bd abc d gt gt gt print abc nd abc d 我在 Vista pro python 2 7 下运行
  • Elastic Beanstalk 上的 Django + MySQL - 查询 MySQL 时出错

    当我在 Elastic beanstalk 上托管的 Django 应用程序上查询 MySQL 时 出现错误 错误说 admin login 处出现操作错误 1045 用户 adminDB 172 30 23 5 的访问被拒绝 使用密码 Y
  • 提供节点名或服务名,或未知

    我收到这个 Python 错误 File Library Frameworks Python framework Versions 2 7 lib python2 7 urllib2 py line 1184 in do open rais

随机推荐

  • Python 3.5 与 Python 2.7:模块导入子模块

    过去几个小时我一直在谷歌上搜索这个问题 但在任何地方都找不到类似的问题 此外 2 7 和 3 5 的文档似乎相同 因此我认为这种行为没有记录 这是我的目录结构 project project py api init py subapi in
  • maven-jaxb2-plugin VS jaxb2-maven-plugin 用于多个模式

    我有多个 xsd 模式 我想将它们解组到不同的包中same folder target generated sources xjc 我尝试了这两个插件 似乎都可以很好地使用这两种配置 但在 maven jaxb2 plugin 的情况下 e
  • MYSQL左连接结果的最后一行

    我需要一些 MYSQL 帮助 我有一个名为 Tickets 的表和一个名为 statusLogs 的表 我该如何 select t sl statusId from ticket LEFT JOIN select from statusLo
  • 使用扩展方法的实体框架分页很慢?

    我在 C 的实体框架中遇到查询缓慢的问题 我创建了一个名为 Page 的扩展方法来处理分页 但是当我使用它时 查询变得非常慢 如果我只是执行 Skip page Value pageSize Value Take pageSize Valu
  • 当目标是类型时,为什么 Coq 不允许反转、析构等?

    When refine正在运行一个程序 我试图通过以下方式结束证明inversion on a False假设当目标是Type 这是我尝试做的证明的简化版本 Lemma strange1 forall T Type 0 gt 0 gt T
  • 如何实现一个具有placement new和emplace功能的简单容器?

    我需要实现一个容器来容纳一定数量的元素 并且出于某种原因 它必须在没有任何堆分配的情况下工作 另一个要求是 容器元素不应以任何方式复制或移动 它们必须直接构建到容器分配的内存中 为此 我决定使用placement new并将内存管理完全委托
  • 地理点之间的距离

    我在计算两个地理点之间的距离时遇到问题 地理点是 position1 mapView getProjection fromPixels int e getX int e getY 另一个 double lat 35 1064 double
  • 如何找到两个数据库之间的差异? [关闭]

    Closed 这个问题是无关 目前不接受答案 我正在尝试将更改从数据库复制到数据库 但是我不知道这些更改到底是什么 是否有一个 SQL 脚本可以查找数据库之间不同的对象 然后生成一个脚本来更新 DatabaseB 以匹配 DatabaseA
  • 如何读取 UISlider 拇指图像的大小

    我试图在 UISlider 中的拇指上方居中放置一个额外的 UIView 为此 我需要拇指图像的宽度 在 iOS6 中 这工作得很好 我可以用 CGFloat thumbWidth self navSlider currentThumbIm
  • Java:如何确定正则表达式模式匹配失败的原因?

    我正在使用正则表达式来匹配模式是否匹配 但我也想知道它何时失败 例如 假设我有一个模式 N 1 3 Y 我将它与字符串 NNNNY 进行匹配 我想知道失败是因为N太多了 或者 如果我将其与字符串 XNNY 进行匹配 我想知道它失败是因为字符
  • 如何正确地在单词前面加上“a”和“an”?

    我有一个 NET 应用程序 给定一个名词 我希望它正确地为该单词添加 a 或 an 前缀 我该怎么做呢 在您认为答案是简单地检查第一个字母是否是元音之前 请考虑以下短语 一个诚实的错误 一辆二手车 下载维基百科 解压缩它并编写一个快速过滤程
  • 将base64图像数据转换为angularjs中的图像文件

    在 AngularJS 中将 Base64 文件转换为图像时文件损坏 任何人都可以建议我如何在 AngularJS 中将 Base64 文件转换为图像 我正在使用这种方法将base64文件转换为图像 var imageBase64 imag
  • 如何分割一个大的 xml 文件?

    我们将 记录 导出到 xml 文件 我们的一位客户抱怨该文件太大 他们的其他系统无法处理 因此 我需要拆分文件 同时在每个新文件中重复 标题部分 因此 我正在寻找一些东西 可以让我为应该始终输出的部分定义一些 xpath 并为 行 定义另一
  • 暂停,恢复时给出上次暂停的值

    我有一个热Observable由套接字供电 我可以使用pausable暂停套接字馈送 但是 一旦我 取消暂停 可观察对象 我需要显示在订阅暂停时套接字可能发送的最后一个值 我不想跟踪套接字手动发送的最后一个值 这怎么可能暂停 从文档中的示例
  • CBPeripheralManager startAdvertising 无法在 OS X yosemite 上运行

    使用您的 mac 运行 OS X 10 10 yosemite DP 6 作为 iBeacon 时有人注意到任何问题吗 我尝试了几种工具 也自己开发了它 使用 CBPeripheralManager startAdvertising 但没有
  • React-native-video 播放 Vimeo 和 YouTube

    我想知道是否可以通过 React Native 组件react native video 播放 Vimeo 和 YouTube 到目前为止 我的研究表明这几乎是不可能的 因为react native video需要直接引用文件 或流 而这些
  • 如何在 Delphi 中使用或解决视觉表单继承问题?

    我一直在 Delphi 7 中从事一个项目 我想让表单从其他表单继承组件 我能够完成这项工作 但遇到了以下问题 我将发布解决方案 希望将来能帮助其他人 在表单的 pas 文件中 我会将表单更改为从其他表单继承 但它不会从祖先表单获取组件 对
  • 如何转义任意字符串以用作 Windows 中的命令行参数?

    我有一个字符串列表 我想在单个 Windows 命令行调用中将这些字符串作为参数传递 对于简单的字母数字字符串 只需逐字传递它们就足够了 gt script pl foo bar baz yes no foo bar baz yes no
  • iPhone中的核心数据默认使用哪种持久存储

    我正在我的应用程序中创建多个持久存储 但我仅使用一个持久存储协调器和托管对象模型 现在我的问题是 当我在托管对象上下文上调用 save 方法时 它将使用哪个持久存储来保存对象 所以我想指定用于保存对象的持久存储 同样 在从数据库中获取对象时
  • 为什么Python中的对象不能添加属性? [复制]

    这个问题在这里已经有答案了 用Python shell编写 gt gt gt o object gt gt gt o test 1 Traceback most recent call last File