在 python 中使用 getattr

2023-12-21

The getattr函数定义如下:

getattr(对象, 名称[ 默认])

返回对象的命名属性的值。名称必须是字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如,getattr(x, 'foobar')相当于x.foobar。如果指定的属性不存在,则返回默认值(如果提供),否则返回AttributeError被提出。

哪种方法可以做到getattr()称呼?例如,它是否调用:

  • __getattr__
  • __get__
  • __getattribute__
  • 还有什么吗?

getattr()__getattribute__()首先,与点运算符相同:

>>> class A:
...     def __getattr__(self, obj):
...         print("Called __getattr__")
...         return None
...     def __getattribute__(self, obj):
...         print("Called __getattribute__")
...         return None
...     def __get__(self, obj):
...         print("Called __get__")
...         return None
... 
>>> a = A()
>>> a.foobar
Called __getattribute__
>>> getattr(a, 'foobar')
Called __getattribute__

约定是使用getattr()仅当您在编译时不知道属性名称应该是什么时。如果这样做,则使用点运算符(“显式优于隐式”...)。

正如 @Klaus D. 在评论中提到的,python 数据模型文档 https://docs.python.org/3/reference/datamodel.html#object.__getattr__更详细地介绍如何.__getattribute__() and .__getattr__()相互影响。可以说,从较高的层面来看,如果前者失败,后者是一种后备选择。注意.__getattr__()和内置的getattr()没有直接关系 - IIRC 这是一个命名的怪癖,起源于 python 的早期版本,并被继承到 python 3 中。

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

在 python 中使用 getattr 的相关文章

随机推荐

  • JavaScript 中的 me = this 是支持缩小的好习惯吗?

    所以在我的 JavaScript 代码库中我一直在使用var me this支持缩小的习惯用法 但我最近开始质疑这一点 我想知道是否分配this使用更智能的缩小工具可以避免变量的变化吗 似乎工具应该能够检测创建变量来表示的函数this将通过
  • 将列逆透视为行(oracle)

    很像这个原来的SO在 Oracle 中动态地将行转换为列 https stackoverflow com questions 7730111 pivoting rows into columns dynamically in oracle
  • 尝试执行 google 脚本时出现 403

    我正在尝试通过 API 执行谷歌脚本 我已授权所有必要的范围 包括我的参数 函数和开发模式 POST https script googleapis com v1 scripts scriptId run devMode true func
  • 安装 Airflow 时出错:默认情况下 Airflow 的依赖项之一安装 GPL

    运行后出现如下错误pip install airflow postgres 命令 gt raise RuntimeError By default one of Airflow s dependencies installs gt a GP
  • 如何让 =NULL 在 SQLite 中工作?

    给出下表 Table Comedians Id First Middle Last 1 Bob NULL Sagat 2 Jerry Kal Seinfeld 我想做以下准备好的查询 SELECT FROM Comedians WHERE
  • 资产“application.js”不存在于资产管道中

    我是新来的Ruby and in ROR框架 我尝试使用 JQuery 创建网络应用程序 我的步骤是 添加 gem jquery rails 并执行捆绑安装来自命令行的命令 String require jquery2添加到应用程序 js
  • pandas to_sql 所有列均为 nvarchar

    我有一个动态创建的 pandas 数据框 其列名称各不相同 我试图将它们推送到 sql 但不希望它们作为默认数据类型 文本 转到 mssqlserver 任何人都可以解释为什么这是默认值吗 使用更常见的数据类型是否有意义 有谁知道如何为所有
  • Numpy:有效求和 M 的子矩阵 m [重复]

    这个问题在这里已经有答案了 如果我知道每个方子矩阵 m 2x2 的维数 并且大方阵 M 的维数可以被维数 m 整除 M modulo m 0 有没有一种有效的方法来求和以下矩阵 M M array 1 1 1 1 1 1 1 1 1 1 1
  • PowerShell:打破嵌套循环

    应该有一个breakPowerShell 中的命令可以通过分配标签退出嵌套循环 只是它不起作用 这是我的代码 timestampServers http timestamp verisign com scripts timstamp dll
  • 包恢复的 Nuget 版本控制问题

    由于 Nuget 存在某种版本控制问题 我无法安装包 使用包还原 以下是我采取的步骤 构建项目 错误 MagicalUnicorn MvcErrorToolkit 的架构版本与 NuGet 版本 1 6 21205 9031 不兼容 请将
  • 在 React 中导入目录

    我在 src 中有一个组件目录 其中有一个名为计算器的目录 然后它有 3 个不同的组件 而不是导入所有 3 个组件 我在想是否可以只导入目录计算器 组件之一具有以下代码 import React from react import Text
  • 霍夫曼压缩算法

    我已经使用霍夫曼算法实现了文件压缩 但我遇到的问题是 要启用压缩文件的解压缩 所使用的编码树或代码本身也应该写入文件 问题是 我该怎么做 在压缩文件的开头编写编码树的最佳方法是什么 霍夫曼编码有一个非常标准的实现基本压缩库 BCL http
  • 如何将表格视图单元格附件应用于表格视图记录

    解释 我有一个从 JSON 填充的 UITableView 表视图的目的是让用户选择单独的行记录并让复选标记附件显示为结果 问题是 虽然我可以让选中的行出现复选标记 但复选标记应用于该行 而不是记录本身 例如 如果我在 tableview
  • 在科学环境中进行编程实践? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 背景 去年 我在一所大学的物理研究小组实习 在这个组中 我们主要使用的是LabVIEW http en wikipedia org w
  • 如何模拟鼠标点击屏幕上的某个位置?

    我想做的是操纵鼠标 出于我自己的目的 这将是一个简单的宏 所以它会将我的鼠标移动到屏幕上的某个位置并单击 就像我以一定的间隔单击一样 这是使用非托管函数来模拟鼠标单击的代码 This is a replacement for Cursor
  • 选择框箭头样式

    我想让第二个选择框箭头与第一个选择框箭头相同 但我不知道为什么它们不同 因为我没有设置箭头的样式 在大多数情况下 浏览器和操作系统决定选择框的样式 仅用 CSS 来更改它们几乎是不可能的 您必须研究替代方法 主要技巧是应用appearanc
  • List的实现既是Set a List(序列)?

    我正在扩展 LinkedList 并实现 Set 这样我就有了一个没有重复项的列表 我想知道这样的实现是否还不存在 我所要做的就是覆盖add e 方法首先查找元素 如果存在则不添加它 就像是 add E if get E null supe
  • Resharper - 如何关闭“私有”访问修饰符?

    我不喜欢在访问修饰符之前放置 私有 无论如何 它们默认都是私有的 这只是视觉上的混乱 如何关闭 resharper 不断用 私人 标记所有内容的功能 锐锐9 1 ReSharper gt 选项 gt 代码编辑 gt C gt 代码样式 gt
  • OkHttp 不断收到 StreamResetException:流已重置:当它为 200 时,内部错误

    I got StreamResetException stream was reset INTERNAL ERROR来自 OkHttp 有什么问题 这是日志 I okhttp OkHttpClient lt 200 https www ex
  • 在 python 中使用 getattr

    The getattr函数定义如下 getattr 对象 名称 默认 返回对象的命名属性的值 名称必须是字符串 如果字符串是对象属性之一的名称 则结果是该属性的值 例如 getattr x foobar 相当于x foobar 如果指定的属