不是有效 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 标识符的属性 的相关文章

随机推荐

  • 如果内部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