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

解析Python中字典["id"]与对象.id访问元素的差异

Python中字典键访问与对象属性访问的区别

核心差异总结

  • 适用对象不同
    blog_post["id"]是字典类型的键值对访问方式,仅能用于字典(比如你给出的{"id":1, ...}这种结构);blog_post.id是类实例对象的属性访问方式,仅能用于自定义类的实例(比如代码中post_objects里的元素,应该是某个BlogPost类创建的对象)。

  • 错误类型与容错逻辑不同

    • 用字典键访问时,如果键不存在,会直接抛出KeyError;
    • 用对象属性访问时,如果属性不存在,会抛出AttributeError。
      另外,字典的键可以是任意不可变类型(比如数字、字符串、元组),但对象属性名必须符合Python标识符规则(不能以数字开头,只能包含字母、数字、下划线)。
  • 赋值与扩展规则不同

    • 字典可以动态添加新键:比如blog_post["new_field"] = "content",直接就能给字典新增键值对;
    • 对象动态添加属性要看类的定义:普通类实例可以直接blog_post.new_field = "content",但如果类用__slots__限制了属性,或者是dataclass这类结构化类,就无法随意新增属性。

结合你的代码示例说明

  • 代码中show_post函数里的blog_post.id,说明post_objects中的元素是类实例(比如定义了class BlogPost: def __init__(self, id, title, ...): self.id = id; ...),所以可以通过.id访问对象的属性。
  • 而你给出的字典结构{"id":1, "body":...},要获取id必须用blog_post["id"],如果尝试用.id访问,会抛出AttributeError: 'dict' object has no attribute 'id'的错误。

内容的提问来源于stack exchange,提问作者Justine Robin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:15:20