不是有效 python 标识符的属性

2023-11-23

通常的属性访问方法要求属性名称是有效的 python 标识符.

但属性不必是有效的 python 标识符:

>>> class Thing:
...     def __init__(self):
...         setattr(self, '0potato', 123)
...         
>>> t = Thing()
>>> Thing.__getattribute__(t, '0potato')
123
>>> getattr(t, '0potato')
123

当然,t.0potato仍然是一个SyntaxError,但该属性仍然存在:

>>> vars(t)
{'0potato': 123}

允许这样做的理由是什么?对于带有空格、空字符串、Python 保留关键字等的属性,真的有任何有效的用例吗?我认为原因是属性只是对象/命名空间字典中的键,但这没有意义,因为不允许作为有效字典键的其他对象:

>>> setattr(t, ('tuple',), 321)
TypeError: attribute name must be string, not 'tuple'

详细信息来自于comment在帖子上完全回答了这个问题,所以我将其发布为答案:

Guido says:

...它是一个feature您可以使用任意字符串 使用 getattr() 和 setattr()。然而这些函数应该(并且确实如此!) 拒绝非字符串。

可能的用例包括隐藏常规点访问的属性,以及使属性与外部数据源相对应(这可能与 Python 关键字冲突)。因此,争论似乎是根本没有充分的理由禁止它。

至于禁止非字符串的原因,这似乎是一个合理的限制,可以确保实现更高的性能:

尽管Python的字典已经有一些仅限字符串的优化——一旦第一个非键字符串出现,它们只是动态地适应更通用且稍慢的方法。

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

不是有效 python 标识符的属性 的相关文章

  • 在二维数组中进行所有可能的组合

    我正在尝试制作具有所有可能组合的 4x4 16 像素黑白图像数组 我制作了以下数组作为模板 template 0 0 0 0 start with all white pixels 0 0 0 0 0 0 0 0 0 0 0 0 然后我想迭
  • 如何打印前面有一定数量空格的整数?

    C has printf Xd Y 它只打印整数 X 并使其在控制台窗口上占据 Y 空格 例如 printf 3d 10 console 10 printf 5d 5 console 5 我如何在 python 3 中使用它 This pr
  • 需要根据数据框中的行号应用不同的公式

    我正在努力在数据框中找到某种移动平均值 该公式将根据正在计算的行数而变化 实际场景是我需要计算Z列 Edit 2 以下是我正在使用的实际数据 Date Open High Low Close 0 01 01 2018 1763 95 176
  • virtualenvwrapper 函数在 shell 脚本中不可用

    所以 我再一次制作了一个很棒的 python 程序 它让我的生活变得更加轻松 并节省了大量时间 当然 这涉及到一个 virtualenv 用mkvirtualenvvirtualenvwrapper 的功能 该项目有一个requiremen
  • 我可以在 matplotlib 中的绘图左侧放置一个垂直颜色条吗?

    来自颜色条方法的 matplotlib 命令摘要 http matplotlib org api pyplot api html highlight colorbar matplotlib pyplot colorbar我知道关键字参数or
  • 如何在plotly(python)中的刻度标签和图形之间添加空格?

    如果我使用绘图创建水平条形图 则每个条形的标签都与图表相对应 我想在标签和图表之间添加一些空间 填充 边距 我怎样才能做到这一点 Example import plotly offline as py import plotly graph
  • DataFrame.loc 的“索引器太多”

    我读了关于切片器的文档 http pandas pydata org pandas docs stable advanced html using slicers一百万次 但我从来没有理解过它 所以我仍在试图弄清楚如何使用loc切片Data
  • 为什么我会收到 ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

    以下代码给出了值错误 major males for row in recent grads if recent grads Men gt recent grads Women major males append recent grads
  • 对法语文本进行词形还原[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一些法语文本需要以某种方式进行处理 为此 我需要 首先 将文本标记为单词 然后对这些单词进行词形还原以避免多次处理相同的词根 据我
  • 如何在 Mac OS X 中删除文件的“扩展属性”?

    我有一个苹果脚本 http en wikipedia org wiki AppleScript运行压力测试的脚本 测试的一部分是打开 保存和关闭某些文件 不知何故 这些文件具有一些 扩展属性 禁止保存文件 这会导致压力测试失败 如何删除扩展
  • Asyncio:从未检索到任务异常的怪异

    假设我有一个简单的代码 import asyncio async def exc print 1 0 loop asyncio get event loop loop create task exc try loop run forever
  • 右键单击 QPushButton 上的 contextMenu

    对于我的应用程序 我在 Qt Designer 中创建了一个 GUI 并将其转换为 python 2 6 代码 关于一些QPushButton 与设计器创建 我想添加右键单击上下文菜单 菜单选项取决于应用程序状态 如何实现这样的上下文菜单
  • 使用 Python-VLC 的 PyInstaller:无属性“media_player_new”错误

    我使用 Python VLC 创建视频播放器 并使用 PyInstaller 在 Windows 10 计算机上生成可执行文件 最初 它给了我错误 Import Error Failed to load dynlib dll libvlc
  • “KMeans”对象没有属性“k”

    我使用 Yellowbrick 包绘制数据集的肘部曲线 以使用 KMeans 作为模型找到数据集的最佳簇数 我正在使用 Scikit learn KMeans 和 Yellowbrick kelbowvisualizer 函数 生成了肘部曲
  • 列表中的特定范围(python)

    我有一个从文本字符串中提取的整数列表 因此当我打印该列表 我称之为test I get 135 2256 1984 3985 1991 1023 1999 我想打印或制作一个仅包含特定范围内的数字的新列表 例如1000 2000之间 我尝试
  • 在字符串内打印单引号

    我想输出 XYZ s ABC 我在Python IDLE中尝试了以下3条语句 第一条和第二条语句输出 a before 带打印功能的第三条语句不输出 before 作为 Python 新手 我想了解为什么 之前输出 在第 1 条和第 2 条
  • 在Python中随机交错2个数组

    假设我有两个数组 a 1 2 3 4 b 5 6 7 8 9 我想将这两个数组交错为变量 c 注意 a 和 b 不一定具有相同的长度 但我不希望它们以确定性的方式交错 简而言之 仅仅压缩这两个数组是不够的 我不想要 c 1 5 2 6 3
  • 关闭正在运行代码的 IPython Notebook

    怎么运行的 我在 IPython Notebook 中运行了一些代码 一些迭代工作 我不小心关闭了正在运行的笔记本的浏览器 但回到 IPython 仪表板 我发现这个特定的笔记本尚未关闭 所以如果我再次打开笔记本 我会在它正在执行的代码前面
  • 如何创建简单的梯度下降算法

    我正在研究简单的机器学习算法 从简单的梯度下降开始 但在尝试用 python 实现它时遇到了一些麻烦 这是我试图重现的示例 我获得了有关房屋的数据 居住面积 以英尺为单位 和卧室数量 以及最终的价格 居住面积 英尺2 2104 卧室 3 价
  • 美丽的汤刮 - 登录凭据不起作用

    尝试使用登录凭据抓取页面 payload email gmail com password urls login url https www spotrac com signin url https www spotrac com nba

随机推荐

  • 如果内部div具有特定类,如何使用javascript隐藏父div

    好吧 假设我有很多 div 有些 div 的孩子有一个班级 其他 div 的孩子有不同的班级 我只想隐藏具有某个类别的孩子的 div 例如 div class mainDiv div class kulkul div class child
  • 通过反射向类添加新方法[重复]

    这个问题在这里已经有答案了 java中是否可以通过反射向类添加方法 public class BaseDomain public BaseDomain Field fields this getClass getDeclaredFields
  • 使用自签名证书从 https 服务器进行 React-native fetch()

    我正在尝试与具有自签名证书的 https 服务器进行通信 我可以从 NET 应用程序 使用 ServicePointManager ServerCertificateValidationCallback 事件 本机 iOs 应用程序 使用
  • 包装 malloc - C

    我是 C 初学者 在阅读 git 的源代码时 我发现了这个包装函数malloc void xmalloc size t size void ret malloc size if ret size ret malloc 1 if ret re
  • CSS文本装饰下划线颜色[重复]

    这个问题在这里已经有答案了 可能的重复 更改下划线颜色 是否可以仅更改文本下的线条颜色 我希望看到类似红色字母 下面有一条蓝线的东西 但我不知道如何完成此操作 对于谷歌同事 复制自重复的问题 这个答案已经过时了文字装饰颜色现在大多数现代浏览
  • Android O - 旧的启动前台服务仍然有效?

    因此 对于 Android O 如果您希望每小时接收的不仅仅是几次位置更新 您需要将服务作为前台服务运行 我注意到启动前台服务的旧方法似乎确实适用于 O IE startForeground NOTIFICATION ID getNotif
  • C++ 中接受“任何内容”的模板

    我有一个简单的模板结构 将字符串与值关联起来 template
  • 调用不存在的端点时收到 403 而不是 404

    这是 Spring Security 配置的典型部分 Override protected void configure HttpSecurity http throws Exception http csrf and cors disab
  • Apache HttpClient 和 PEM 证书文件

    我想以编程方式访问需要客户端证书的网站 该证书位于 PEM 文件中 在此应用程序中 我不想将它们添加到我的密钥库中 如果可以避免的话 请使用 keytool 或 openssl 我需要直接在代码中处理它们 HttpClient httpcl
  • 弹出窗口在关闭时将数据返回给父级

    我使用打开了一个弹出窗口window open 我现在想要的是用户能够单击这个新窗口中的两个链接之一 允许 或 不允许 当用户单击这些链接之一时 弹出 窗口应该关闭 并返回 允许 或 不允许 或类似的内容 true false就可以了 到父
  • 在 Inno Setup 脚本上安装 MySQL 并加载数据库

    我在 Stack Overflow 上读了很多文档 你们太棒了 我采用了另一篇文章中建议的一些代码 帮助很大 感谢 RobeN 我能够加载并启动 MySQL 不过 我确实阅读了建议将数据库自动加载到序列中的文档 我似乎无法弄清楚 任何帮助都
  • document.all 和 document.layers 现在已过时

    我正在使用一些 旧的 本机 javascript 并且遇到了 document getElementById document all 和 document layers 的分离 据我所知 document all 和 document l
  • Android 多个同步适配器项目(例如 Google 帐户)?

    我目前已将 Android 应用程序设置为使用 Android 的 AccountManager 功能 使用 SyncAdapter 和经过身份验证的帐户自动执行同步 我只运行 1 个同步适配器 用于同步所有内容 但我想将其分开 以便以不同
  • scala 中的 MinMax 归一化

    我有一个包含多列的 org apache spark sql DataFrame 我想使用 MinMax 归一化或任何技术来缩放 1 列 lat long dist 以在 1 和 1 之间缩放数据并将数据类型保留为 org apache s
  • 不明确的 if 和 else 分支:行为是否已定义?

    我最近遇到了一些 C 代码 如下所示 if test 1 if test 2 Do stuff else exit 0 这是不明确的 因为编译器可以将其视为 if test 1 if test 2 else or as if test 1
  • 查找数组中元素的最大总和的算法,使得相邻元素不超过 k 个

    我遇到了这个问题 给定一个仅包含正值的数组 您希望在没有超过 k 个选定元素的组是相邻的约束下最大化选定元素的总和 例如 如果输入为 1 2 3 1 7 9 n 6 且 k 2 输出将为 21 来自选择元素 2 3 7 9 我的简单 DP
  • 执行大查询时内存不足?

    我在尝试进行大查询时收到此错误 java lang OutOfMemoryError Java heap space 我搜索过并发现申请设置自动提交 假 and 设置获取大小我准备好的语句的方法可能有助于处理大查询 然而 当我使用它时 我收
  • 将长sql vba语句分成多行

    我对 VBA 环境完全陌生 我试图将这一行分成多行 但失败了 有人可以帮我把这段代码分成多行吗 DoCmd RunSQL UPDATE INDIVIDUAL SET INDIVIDUAL INDI FIRSTNAME prospect co
  • Ruby 在 Windows 上崩溃

    我面临着这里描述的同样的问题 为什么 ruby exe 遇到了问题并且需要关闭 rails 失败 那是 ruby 崩溃并出现以下错误 ruby exe has encountered a problem and needs to close
  • 不是有效 python 标识符的属性

    通常的属性访问方法要求属性名称是有效的 python 标识符 但属性不必是有效的 python 标识符 gt gt gt class Thing def init self setattr self 0potato 123 gt gt gt