You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中getattr()调用属性与直接调用对象属性的区别是什么?

两段deque操作代码的运行逻辑差异

第一段代码(可正常达到预期)

通过Python的getattr内置函数实现动态方法调用,逻辑完全符合预设需求:

  • 输入拆分后得到的method是字符串类型,存储的是用户输入的deque方法名(比如append、popleft等)
  • getattr(d, method)会根据字符串的实际内容,去deque实例d中获取同名的方法对象
  • 后续(*n)会把输入拆分得到的参数解包传入方法调用,实现对deque的动态操作

第二段代码(无法正常运行,结果必然不一致)

d.method(*n)是固定属性访问语法,和你定义的method变量没有任何关联:

  • 这里的method是代码写死的属性名,Python不会读取method变量的值,只会直接去d中查找名字就叫method的方法
  • deque类本身没有定义过method这个方法,运行到这一行会直接抛出AttributeError报错,无法完成后续的任何deque操作

举个实际场景示例:假设输入内容为append 3,第一段代码等价于执行d.append("3");第二段代码等价于执行d.method("3"),直接触发属性不存在的错误。

核心本质差异:getattr是根据变量的值动态获取属性,点号访问语法是直接访问和后面字面量同名的属性,和同名变量完全无关

内容的提问来源于stack exchange,提问作者Abinash Karki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 02:24:00