super已经有人解释了,就不画蛇添足了。d['c'] = 100

d.c-------->不加__getattr__()会显示访问失败

d['c']和d.c是有什么区别吗

第一眼看上去感觉是JS开发者。。。d.c,访问的是d的属性,你也发现了,访问的是__getattr__,Python用一个字典维护着属性。

d['c'],访问的是__getitem__,通过这个方法访问字典内部的数据结构。

对于d['c'],字典中的键是字符串'c',而d.c在Python语境中,认为c是d的一个属性,而不是字典的键。

举个例子:

>>> a = {(1, 2): 'ab'}

>>> a[(1, 2)]

'ab'

按照试图用属性访问的话,难不成写成a.(1,2)这样的形式?这根本不是合法的Python语句。

所以访问字典中的键,还是用方括号吧。

补充:

其实,你要是真想这么做,完全不用自己写__getattr__,只要这么做就行了。加不加super,就看自己需求了。

class Dict(dict):

def __init__(self, **kw):

self.__dict__ = self

但强烈不建议这么做。Python的键和属性访问在语义上有明确的区别,最好还是分开使用。

再补充:

评论有朋友指出不要继承dict,这是对的。但我想有人会问那应该继承什么,答案是collections模块中的MutableMapping这个ABC。(不过好像走题了。。)

python中key_python属性和key的区别?相关推荐

  1. 如何在Python中读取属性文件?

    We can use jproperties module to read properties file in Python. A properties file contains key-valu ...

  2. Python中爬虫框架或模块的区别

    Python中爬虫框架或模块的区别,我们在Python的学习过程中,需要不断的总结知识点,这样我们才能进步的更快一些. (1)爬虫框架或模块 Python自带爬虫模块:urllib.urllib2; ...

  3. Python中值传递和引用传递区别

    原文:http://blog.csdn.net/xuqiaobo/article/details/72236539 举例,函数参数如果是dic,都不需要返回值,原值就被改变了 def aa(dic): ...

  4. Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用...

    Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...

  5. python 中 property 属性的讲解及应用

    Python中property属性的功能是:property属性内部进行一系列的逻辑计算,最终将计算结果返回 property属性的有两种方式: 装饰器 即:在方法上应用装饰器 类属性 即:在类中定义 ...

  6. python中列表 元组 字典 集合的区别

    参考文章:python中列表 元组 字典 集合的区别

  7. Python中爬虫框架或模块的区别!

    Python中爬虫框架或模块的区别,我们在Python的学习过程中,需要不断的总结知识点,这样我们才能进步的更快一些. (1)爬虫框架或模块 Python自带爬虫模块:urllib.urllib2; ...

  8. 【Python】Python中str()和repr()函数的区别

    作用 在 Python 中要将某一类型的变量或者常量转换为字符串对象通常有两种方法,即 str() 或者 repr() . 区别与使用 参考文章:Python 中 str() 和 repr() 函数的 ...

  9. python中的return和print的区别_python中return和print的区别(详细)

    Huskiesir python最近正在研究.今天,我面临一个问题,那就是,返回和印刷的区别.双方都能输出结果.的区别是什么?闲话少说,看下面的例子.# Code1: def break_words( ...

最新文章

  1. 计算机保研去北科大还是大工,全部保研!大工这寝室太牛
  2. 使用visual studio code调试php代码
  3. hive中如何读取数组_hive解析json嵌套数组
  4. java 不能使用foreach_为什么我不能在Java Enumeration上使用foreach?
  5. android smart scale
  6. matplotlib之scatter散点、bar直方图(笔记四)
  7. 【主席树】bzoj1112: [POI2008]砖块Klo
  8. 使用剪切板[4]: 如果把子控件一起复制? - 同时回复 ghd2004 的问题
  9. 编译x264出现错误:No working C compiler found.
  10. Matlab 警告: 名称不存在或不是目录
  11. Android抓包工具——Fiddler
  12. [linux] ab压测工具进行post压力测试
  13. 谷歌学术镜像mark
  14. 【Unity实战100例】Unity制作脑图编辑工具(全网第一首发)
  15. 百度提升关键词排名优化软件,百度点击器,百度排名软件,百度竞价助手
  16. 卸载百度软件修复服务器,快速修复win7系统笔记本卸载百度软件中心助手的解决教程...
  17. 主流加密通信应用Signal在中国“失联”
  18. 情若人间诗词主角夏当午萧楚河by丫妖炎炎全文免费在线阅读
  19. 第三部分PaddleX模型集_3.2 目标检测
  20. STC 单片机应使用何种编译器/汇编器

热门文章

  1. oracle定时向mysql取数据_Oracle中通过Job实现定时同步两个数据表之间的数据
  2. git只提交一张图片_几张图让你彻底弄懂git工作流(三) ——git深入
  3. linux mariadb 图形化,linux 初学者 - MariaDB 图形管理篇
  4. springboot nacos_springboot集成nacos
  5. mysql 防重复提交_怎样防止刷新重复提交、防后退
  6. python3中round的用法_Python 3标准库用法--reversed、round、set
  7. php移除所有子节点,jQuery删除/清空指定元素下的所有子节点的方法
  8. java list树 广度_java树的广度优先遍历思路
  9. nginx curl linux,linux nginx 下通过curl url方式,符以后的参数无效
  10. linux程序循环执行,Linux之循环执行任务