为什么使用 setattr() 和 getattr() 内置函数?

2024-04-05

通过阅读文档,我确切地了解了什么获取属性() http://docs.python.org/3.3/library/functions.html#getattr and 设置属性() http://docs.python.org/3.3/library/functions.html#setattr做。但它也明确表示getattr(x, 'foobar')相当于x.foobar and setattr(x, 'foobar', 123)相当于x.foobar = 123.

那么我为什么要使用它们呢?


因为您也可以使用动态变量:

somevar = 'foo'
getattr(x, somevar)

您无法使用常规属性访问语法来做到这一点。

注意getattr()还采用可选的默认值,如果属性是则返回missing:

>>> x = object()
>>> getattr(x, 'foo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'foo'
>>> getattr(x, 'foo', 42)
42

Using getattr()您可以从其他内容中提取属性名称,而不是文字:

for attrname in dir(x):
    print('x.{} = {!r}'.format(attrname, getattr(x, attrname))

或者你可以使用setattr()设置动态属性:

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

为什么使用 setattr() 和 getattr() 内置函数? 的相关文章

随机推荐

  • 为什么 cv2.rectangle 有时返回 np.ndarray,而有时返回 cv2.UMat

    我目前正在研究一些图像的可视化 并发现 opencv 的 cv2 rectangle 的奇怪行为 当输入图像是 np ndarray 时 例如 arr cv2 rectangle 返回一个 np ndarray 并且 arr 是用矩形绘制的
  • 如何禁用默认消息:“您的请求已成功处理”?

    当在我的 portlet 中执行添加 更新操作时 如何为我的插件 portlet 禁用此默认消息 您的请求已成功处理 另外我想为我的自定义配置页面禁用此功能 configuration jsp 这是当我们单击每个 Portlet 右上角出现
  • 这个“你好世界!”是怎么做到的?程序工作?

    int main void return yes no main printf hello world n 0 outputs hello world 但它实际上是如何工作的呢 确实有两件事 函数指针不像其他指针那样取消引用 main ma
  • Powershell - 排除 Get-ChildItem 中的文件夹

    如何排除文件夹 现在我对文件夹名称进行硬编码 但我希望它更加灵活 foreach file in Get ChildItem fileDirectory Exclude folderA folderb 如何排除文件夹 如果您指的是所有文件夹
  • libpcap 在它们下面使用原始套接字吗?

    我对原始套接字和 libcap 的使用感到有点困惑 任何人都可以简单地指出使用两者的优点 我读了几个链接 但是 它让我感到困惑 libpcap 在不同的操作系统上使用不同的机制 在 Linux 上 它使用 PF PACKET 原始套接字或熟
  • 如何根据 Mongodb 中的键删除重复项?

    我在 MongoDB 中有一个集合 其中大约有 约 300 万条记录 我的样本记录看起来像 id ObjectId 50731xxxxxxxxxxxxxxxxxxxx source references id ObjectId 5045xx
  • 为什么“OR 运算”或 OR 条件不可控制?

    在文献中 我读到在 WHERE 子句中使用 OR 条件或运算符会生成一个语句non sargable 我不确定为什么或如何这是真的 任何帮助 将不胜感激 权威优化书籍作者给出了答案SQL Server 查询性能调优 https rads s
  • 创建动画按钮

    我有按钮可以在单击时创建动画吗 使用 Photoshop 我创建了两个图像 启用和禁用 在Windows窗体中插入图片框并单击事件 单击图像从启用变为禁用 但是可以有动画吗 像这样 看来您提到了 WinForms 所以我将解决这个问题 是的
  • 测试元素焦点

    我如何检查这个TextInput组件是否受到关注 我知道该怎么做在网上 https spectrum chat testing library general how to test element is focused 7Eabdca78
  • PHP 循环内循环,选择了选项吗?

    使用 PHP 我在循环中回显表行 如下所示
  • 如何使用 $dateFromString 转换数组中的日期?

    我正在尝试使用 dateFromString 将数组中的时间戳转换为日期 我试图从中转换日期的示例文档 id ObjectId 5cbc5efc8af5053fd8bdca31 ticker ticker currency currency
  • Java分割字符串的表现

    这是我的应用程序中的当前代码 String ids str split 在分析应用程序时 字符串分割花费了不可忽视的时间 另外 split方法采用正则表达式 这在这里是多余的 我可以使用什么替代方法来优化字符串分割 是StringUtils
  • 无法使用 Maven 中的配置文件和属性构建适配器

    我已经使用创建了一个http适配器mfpdev adapter create但我发现 adatper xml 配置文件包含服务器连接配置 我想相应地更改为 dev test produciton 环境 所以我尝试通过更改 pom xml 来
  • 无法启动 Spring Boot 应用程序 - 资源位置不能为空

    第一次尝试springboot 但无法启动 我使用了示例应用程序 https github com spring guides gs spring boot git https github com spring guides gs spr
  • 你在子类中调用 super.finalize() 吗?

    我 在某处 读到过finalize 因为当子类被垃圾收集时 不能保证调用父类 这是否意味着大多数开发人员会覆盖finalize 在子类中并调用super finalize Finalize 不会自动为超类调用 因此 如果您重写 Finali
  • 如何将数组键从大写更改为小写?

    我有一个键为大写的数组 我想将它们更改为小写 我怎样才能做到这一点 我尝试做 data1 array foreach row as key gt value key strtolower str data1 key value data d
  • lib模块和主模块之间如何通信

    建筑工程 我有2个模块 app 应用 box 库模块 PROBLEM 我正在尝试使用一部分app模块来自box模块 问题是app模块依赖于box模块因此我无法指出box模块 因为这会产生循环依赖 如何去app模块方法来自box模块 Or 如
  • “Git Bash here”不会保留会话之间的 bash 历史记录[重复]

    这个问题在这里已经有答案了 我在 Windows 7 上运行 Git 1 8 0 preview20121022 并且安装时使用 Git Bash Only 对 Windows cmd 的干扰最小 当我从开始菜单快捷方式打开 Git Bas
  • “order by”在mysql中花费太多时间

    在 MySQL 中 查询中的 order by 花费了很多时间 SHOW PROFILES 显示排序过程所花费的时间 是否有任何设置 解决方法可以减少排序时间 如果您在排序依据的字段上没有索引 请添加一个 在某些情况下 MySQL 可以使用
  • 为什么使用 setattr() 和 getattr() 内置函数?

    通过阅读文档 我确切地了解了什么获取属性 http docs python org 3 3 library functions html getattr and 设置属性 http docs python org 3 3 library f